2013-01-09 118 views
0

我處理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

「你好程序」:你是怎麼用中文寫「Hello,world」的? :) - 開玩笑。這裏(http://msdn.microsoft.com/en-us/library/windows/desktop/ms632634(v=vs.85).aspx)它說你應該返回'WVR_REDRAW'來重新繪製窗口,我看到你已經註釋掉了。爲什麼? –

+0

@AndyProwl:因爲它不起作用。 – Jichao

+0

查看WM_NCCALCSIZE文檔(http://msdn.microsoft.com/en-us/library/ms632634(VS.85).aspx),瞭解各種問題的解釋......該消息很少用到,我猜你並不需要它。你究竟想在這裏做什麼? – HerrJoebob

回答

2

這裏的根本原因是如果您更改了客戶端大小,您更改了非客戶端區域大小。 但WM_ERASEBKGND處理程序只會刪除客戶區域背景,但不會刪除非客戶區域大小。

因此,如果您更改了客戶端大小,您還需要處理WM_NCPAINT以清除非客戶端區域背景並使用DefWindowProc繪製框架。

相關問題