我处理WM_NCCALCSIZE消息,并尝试手动设置dest窗口客户端。
case WM_NCCALCSIZE:
{
RECT *rect = (LPRECT)lParam;
if (wParam == TRUE)
{
////缩小客户区的范围
//RECT *rect = (LPRECT)lParam;
//rect->left += 8;
//rect->right -= 8;
//rect->top += 30;
//rect->bottom = 8;
InflateRect(rect, -50, -50);
RECT dstRect = *(LPRECT)lParam;
RECT srcRect = rect[1];
rect[1] = dstRect;
rect[2] = srcRect;
//DefWindowProc(hWnd, message, wParam, lParam);
return 0;
//return WVR_REDRAW;
}
else
{
DWORD lRet = DefWindowProc(hWnd, message, wParam, lParam);
return lRet;
}
但结果不好, 当我调整窗口大小时,使用DrawText绘制的文本不会被干净地删除。
如何完全删除背景?
答案 0 :(得分:2)
这里的根本原因是如果您更改了客户端大小,则更改了非客户端区域大小。 但WM_ERASEBKGND处理程序仅擦除客户区背景,但不擦除非客户区域大小。
因此,如果您更改了客户端大小,则还需要处理WM_NCPAINT以擦除非客户区背景并使用DefWindowProc绘制帧。