如何设置Win32窗口(本机)的非客户区域的大小。
我想要的是使CAPTION / TITLE栏更加强烈。
我已经阅读并被告知我应该处理WM_NCCALCSIZE但我在文档中找不到任何明确的内容。
来自MSDN:
WM_NCCALCSIZE通知
当必须计算窗口的客户区的大小和位置时,会发送 WM_NCCALCSIZE 消息。通过处理此消息,当窗口的大小或位置发生变化时,应用程序可以控制窗口客户区的内容。
窗口通过其WindowProc函数接收此消息。
的wParam 如果wParam为TRUE,则指定应用程序应指示客户区的哪个部分包含有效信息。系统将有效信息复制到新客户区域内的指定区域。 如果wParam为FALSE,则应用程序不需要指示客户区的有效部分。
lParam的 如果wParam为TRUE,则lParam指向NCCALCSIZE_PARAMS结构,该结构包含应用程序可用于计算客户端矩形的新大小和位置的信息。 如果wParam为FALSE,则lParam指向RECT结构。在输入时,该结构包含窗口的建议窗口矩形。退出时,结构应包含相应窗口客户区的屏幕坐标。
答案 0 :(得分:11)
通过处理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之前和之后的值,您可以学到很多东西。