2010-01-25 88 views
10

如何設置Win32窗口的非客戶區大小(本地)。如何設置Win32窗口的非客戶區大小(本地)

我想要的是使CAPTION/TITLE bar THICKER。

我已閱讀並被告知我應該處理WM_NCCALCSIZE,但我無法在文檔中找到任何明確的信息。

從MSDN:

WM_NCCALCSIZE通知


當必須計算一個窗口的客戶區的大小和位置被髮送的WM_NCCALCSIZE消息。通過處理此消息,應用程序可以在窗口大小或位置發生更改時控制窗口客戶區的內容。

窗口通過WindowProc函數接收此消息。

的wParam 如果wParam爲TRUE,則表示該應用程序應說明哪些客戶區的一部分包含有效的信息。系統將有效信息複製到新客戶區域內的指定區域。 如果wParam爲FALSE,應用程序不需要指示客戶區的有效部分。

lParam的 如果wParam爲TRUE,lParam的指向包含的信息的應用程序可以用來計算新的大小和客戶矩形的位置的NCCALCSIZE_PARAMS結構。 如果wParam爲FALSE,則lParam指向RECT結構。在輸入時,結構包含窗口的建議窗口矩形。退出時,結構應該包含相應窗口客戶區的屏幕座標。

+0

你的意思是你想要設置整個寡婦(包括非客戶區)的大小,或者改變非客戶指標,比如邊框的寬度或者標題欄的高度? – 2010-01-25 19:45:21

+0

剛剛編輯。我想讓標題欄變粗。 – 2010-01-25 20:40:06

回答

9

您通過處理WM_NCCALCSIZE消息來設置非客戶區的大小。但是,除非你打算做所有的非客戶端繪製的,以及通過處理WM_NCPAINT

編輯不這樣做:這裏有兩個代碼片段,一個處理WM_NCCALCSIZE,並提供一個簡單的n個像素的邊界,而另一個比在DefWindowProc完成默認處理後添加一些額外的像素。

case WM_NCCALCSIZE: 
    { 
    lRet = 0; 
    const int cxBorder = 2; 
    const int cyBorder = 2; 
    InflateRect((LPRECT)lParam, -cxBorder, -cyBorder); 
    } 

case WM_NCCALCSIZE: 
    { 
    LPNCCALCSIZE_PARAMS pncc = (LPNCCALCSIZE_PARAMS)lParam; 
    //pncc->rgrc[0] is the new rectangle 
    //pncc->rgrc[1] is the old rectangle 
    //pncc->rgrc[2] is the client rectangle 

    lRet = DefWindowProc (hwnd, WM_NCCALCSIZE, wParam, lParam); 
    pncc->rgrc[0].top += ExtraCaptionHeight; 
    } 

你可以通過WM_NCCALCSIZE到DefWindowProc函數和前後看NCCALCSIZEPARAM值學到很多東西。

+0

我畫了非客戶端部分,並知道WM_NCCALCSIZE,閱讀文檔,但我沒有得到它。 – 2010-01-25 20:34:01

+0

是的,這是一小撮。我有一段很久以前寫的代碼。我會看看我能否找到它。 – 2010-01-25 20:43:57

+0

非常感謝。 – 2010-01-25 23:10:59