0

WM_NCCALCSIZE メッセージを処理し、dest ウィンドウ クライアント 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 で描画されたテキストがきれいに消去されません。

背景を完全に消去するにはどうすればよいですか?

4

1 に答える 1

2

ここでの根本的な原因は、クライアント サイズを変更した場合、非クライアント領域のサイズを変更したことです。ただし、WM_ERASEBKGND ハンドラーは、クライアント領域の背景のみを消去し、非クライアント領域のサイズは消去しません。

そのため、クライアント サイズを変更した場合は、WM_NCPAINT を処理して非クライアント領域の背景を消去し、DefWindowProc でフレームをペイントする必要もあります。

于 2013-01-09T05:08:24.057 に答える