如何设置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结构.在输入时,该结构包含窗口的建议窗口矩形.退出时,结构应包含相应窗口客户区的屏幕坐标.
Joh*_*ler 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;
}
Run Code Online (Sandbox Code Playgroud)
通过将WM_NCCALCSIZE传递给DefWindowProc并查看NCCALCSIZEPARAM之前和之后的值,您可以学到很多东西.
| 归档时间: |
|
| 查看次数: |
9917 次 |
| 最近记录: |