SDK下
在WM_CREATE处我设了个定时器,每隔一分钟触发一次MovPic函数
void MovPic(HWND hwnd)
{
HDC hdc = GetDC(hwnd);
HBITMAP hbmp = LoadBitmap((HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDB_BITMAP1));
HDC hOldDC = CreateCompatibleDC(hdc);
SelectObject(hOldDC, hbmp);
static int x = 0;
BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, x, 0, SRCCOPY);
x+=50;
DeleteObject(hbmp);
DeleteObject(hOldDC);
}但是为什么只显示图片,而不会动呢?
如果BitBlt改为
BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, 0, 0, SRCCOPY);
虽然可以移动,但是之前的却没有删除,只是做了个拷贝
请问SDK下怎样才可以移动图片呢?
谢谢了~
在WM_CREATE处我设了个定时器,每隔一分钟触发一次MovPic函数
void MovPic(HWND hwnd)
{
HDC hdc = GetDC(hwnd);
HBITMAP hbmp = LoadBitmap((HINSTANCE)GetWindowLong(hwnd, GWL_HINSTANCE), MAKEINTRESOURCE(IDB_BITMAP1));
HDC hOldDC = CreateCompatibleDC(hdc);
SelectObject(hOldDC, hbmp);
static int x = 0;
BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, x, 0, SRCCOPY);
x+=50;
DeleteObject(hbmp);
DeleteObject(hOldDC);
}但是为什么只显示图片,而不会动呢?
如果BitBlt改为
BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, 0, 0, SRCCOPY);
虽然可以移动,但是之前的却没有删除,只是做了个拷贝
请问SDK下怎样才可以移动图片呢?
谢谢了~
再MovPic();
先把上一次的图片再绘一次用BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, 0, 0, PATINVERT); //XOR
再绘这次的BitBlt;
改成BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, 0, 0, SRCCOPY);
之后出现的问题参考楼上的回答.
绘制之前需要擦除原图象,在原位置FillRect就可以,但是又会带来闪烁问题,可以去搜一下"双缓冲"