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下怎样才可以移动图片呢? 
谢谢了~

解决方案 »

  1.   

    可以先擦除Invalidate()
    再MovPic();
      

  2.   

    要么
    先把上一次的图片再绘一次用BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, 0, 0, PATINVERT); //XOR
    再绘这次的BitBlt;
      

  3.   

    BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, x, 0, SRCCOPY);
    改成BitBlt(hdc, x+50, 0 , 30, 45, hOldDC, 0, 0, SRCCOPY);
    之后出现的问题参考楼上的回答.
      

  4.   

    最后要ReleaseDC,否则资源泄漏.
    绘制之前需要擦除原图象,在原位置FillRect就可以,但是又会带来闪烁问题,可以去搜一下"双缓冲"