Win32防止屏幕闪烁

在回调函数中处理WM_PAINT消息:

case WM_PAINT:


 PAINTSTRUCT ps;

//得到当前HDC
 HDC hdc = BeginPaint(&ps);
 

//创建内存HDC
 HDC memHDC = CreateCompatibleDC(hdc);

//获取客户区大小
 RECT rectClient;
 GetClientRect(&rectClient);

//创建位图
 HBITMAP bmpBuff = CreateCompatibleBitmap(hdc,RECT_WIDTH(rectClient),RECT_HEIGHT(rectClient));
 HBITMAP pOldBMP = (HBITMAP)SelectObject(memHDC, bmpBuff);

    // draw something
    DrawBackGround(memHDC);

//拷贝内存HDC内容到实际HDC
BOOL tt = BitBlt(hdc, rectClient.left, rectClient.top, RECT_WIDTH(rectClient),
     RECT_HEIGHT(rectClient), memHDC, rectClient.left, rectClient.top, SRCCOPY);

//内存回收
 SelectObject(memHDC, pOldBMP);
 DeleteObject(bmpBuff);
 DeleteDC(memHDC);

 


 EndPaint(&ps);

return 0;

为防止清除背景而造成的白屏可以在回调函数中截获WM_ERASEBKGND消息使其什么也不要做

case WM_ERASEBKGND:

//什么也不做,返回0使默认窗口回调不再处理这个消息

return 0;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章