C++ 如何调整客户端大小?

C++ 如何调整客户端大小?,c++,winapi,gdi,C++,Winapi,Gdi,我处理WM_NCCALCSIZE消息,并尝试手动设置dest window client rect case WM_NCCALCSIZE: { RECT *rect = (LPRECT)lParam; if (wParam == TRUE) { ////缩小客户区的范围 //RECT *rect = (LPRECT)lParam;

我处理WM_NCCALCSIZE消息,并尝试手动设置dest window client rect

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绘制的文本不会被清除干净


如何完全擦除背景?

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


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

“Hello程序”:这就是您用中文编写“Hello,world”的方式吗?:)-只是开玩笑。这里()表示您应该返回
WVR\u REDRAW
以重新绘制窗口,我看到您已将其注释掉。为什么?@AndyProwl:因为它不起作用。请查看WM_NCCALCSIZE文档()以了解这里各种问题的解释。。。这条信息很少被使用,我猜你实际上并不需要它。你到底想在这里做什么?@HerrJoebob:调整客户机rect的大小。