在回調函數中處理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;