在回调函数中处理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;