2010-01-25 276 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