如何设置Win32窗口非客户区的大小(native)。
我想要的是让 CAPTION/TITLE 栏变粗。
我已阅读并被告知我应该处理 WM_NCCALCSIZE,但我在文档中找不到任何明确的内容。
来自 MSDN:
WM_NCCALCSIZE 通知
WM_NCCALCSIZE 消息在必须计算窗口客户区 的大小和位置时发送。通过处理此消息,应用程序可以在窗口大小或位置发生变化时控制窗口客户区的内容。
窗口通过其 WindowProc 函数接收此消息。
参数 如果 wParam 为 TRUE,则它指定应用程序应指示客户区的哪一部分包含有效信息。系统将有效信息复制到新客户区内的指定区域。 如果wParam为FALSE,应用程序不需要指明客户区的有效部分。
l参数 如果 wParam 为 TRUE,则 lParam 指向一个 NCCALCSIZE_PARAMS 结构,该结构包含应用程序可用于计算客户端矩形 的新大小和位置的信息。 如果 wParam 为 FALSE,lParam 指向一个 RECT 结构。在入口处,该结构包含为窗口建议的窗口矩形。退出时,该结构应包含相应窗口客户区的屏幕坐标。
最佳答案
您可以通过处理 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 的值,您可以学到很多东西。
关于c - 如何设置Win32窗口非客户区的大小(native),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2135068/