struct SCREEN{
public:
HBITMAP hbmp;
HDC hdc;
};
SCREEN getScreen(HDC src){
HDC hdcTemp = CreateCompatibleDC(src);
HBITMAP hbmpTemp = CreateCompatibleBitmap(src, 1024, 768);
SelectObject(hdcTemp, hbmpTemp);
BitBlt(hdcTemp, 0, 0, 1024, 768, src, 0, 0, SRCCOPY);
SCREEN scr;
scr.hbmp = hbmpTemp;
scr.hdc = hdcTemp;
return scr;
};
CImage img;
char *path = "C:\\seifenblase.png";
bool flag = true;
SCREEN screen;
int X = 0;
int Y = 0;
int stepX = 5;
int stepY = 5;
long WINAPI ScreenSaverProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM lParam)
{
HDC dc = GetDC(hWnd);
HDC tmp = CreateCompatibleDC(dc);
HBITMAP hbm = CreateCompatibleBitmap(dc, 1024, 768);
SelectObject(tmp, hbm);
switch(message)
{
case WM_CREATE:
UINT timer_id;
SetTimer(hWnd,timer_id,100,NULL);
screen = getScreen(dc);
img.Load(path);
break;
case WM_TIMER:
{
// alles in HDC tmp schreiben
if(flag == true){
BitBlt(dc, 0, 0, 1024, 768, screen.hdc, 0, 0, SRCCOPY);
flag = false;
}
X += stepX;
Y += stepY;
BitBlt(tmp, 0, 0, 200+stepX, 200+stepY, screen.hdc, X-stepX, Y-stepY, SRCCOPY);
img.Draw(tmp, 0, 0, 200, 200);
// tmp in dc kopieren
BitBlt(dc, X-stepX, Y-stepY, 200+stepX, 200+stepY, tmp, 0, 0, SRCCOPY);
break;
}
case WM_DESTROY:
PostQuitMessage(WM_QUIT);
break;
}
return DefScreenSaverProc(hWnd,message,wParam,lParam);
}