0

我处理 WM_NCCALCSIZE 消息,并尝试手动设置目标窗口客户端矩形。

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 绘制的文本不会被完全擦除。

如何完全擦除背景?

4

1 回答 1

2

这里的根本原因是如果您更改了客户端大小,那么您更改了非客户区大小。但是 WM_ERASEBKGND 处理程序只擦除客户区背景而不是非客户区大小。

因此,如果您更改了客户端大小,您还需要处理 WM_NCPAINT 以擦除非客户端区域背景并使用 DefWindowProc 绘制框架。

于 2013-01-09T05:08:24.057 回答