我有一个简单的GUI,当我在某个标签上时,它应该显示图像。我在选项卡过程中有WM_PAINT消息,如下所示
case WM_PAINT:
{
PAINTSTRUCT psLOGO;
RECT rcLOGO;
HDC hdcLOGO;
//Prepares for painting window
hdcLOGO = BeginPaint(hwndMonitor, &psLOGO);
//Retrieves the coordinates of the windows client area
GetClientRect(hwndMonitor, &rcLOGO);
//creates a copy of the memory device context
HDC hdcDoubleLOGO = CreateCompatibleDC(hdcLOGO);
HBITMAP Logo = LoadBitmap(GetModuleHandle(NULL), MAKEINTRESOURCE(IDB_BITMAP1)); //Get a bitmap of the picture to be updated
HBITMAP bmOldLOGO = (HBITMAP)SelectObject(hdcDoubleLOGO, Logo); //Get a handle to the image being replaced
BitBlt(hdcLOGO, 0, 0, rcLOGO.right, rcLOGO.bottom, hdcDoubleLOGO, 0, 0, SRCCOPY); //Bit block transfer of the bitmap color data
SelectObject(hdcDoubleLOGO, bmOldLOGO);
DeleteDC(hdcDoubleLOGO);
EndPaint(hwndMonitor, &psLOGO);
DeleteObject(Logo);
break;
}
hwndMonitor是该特定标签页的句柄
当我打开选项卡时图像显示,但如果我调整窗口大小,或者如果我最小化并重新打开GUI,图像将消失
我必须转到另一个标签并返回该标签以获取图像
我在WM_PAINT消息中做错了吗?
答案 0 :(得分:1)
您还必须对WM_SIZE消息做出反应。调整窗口大小不会释放绘制消息。
在WM_SIZE上只需调用:
InvalidateRect(hwnd,&rect,TRUE);
UpdateWindow(hwnd);
rect是一个具有当前窗口大小的矩形。 Invalidate标记重绘的矩形,UpdateWindow确保它立即重新绘制。