如何调整客户端大小?

时间:2013-01-09 00:35:09

标签: c++ winapi gdi

我处理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;
            }

但结果不好,enter image description here 当我调整窗口大小时,使用DrawText绘制的文本不会被干净地删除。

如何完全删除背景?

1 个答案:

答案 0 :(得分:2)

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

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