C 如何设置Win32窗口(本机)的非客户端区域的大小

C 如何设置Win32窗口(本机)的非客户端区域的大小,c,winapi,C,Winapi,如何设置Win32窗口(本机)的非客户端区域的大小 我想要的是使标题栏变粗 我已经阅读并被告知我应该处理WM_NCCALCSIZE,但我在文档中找不到任何明确的内容 来自MSDN: WM\u NCCALCSIZE通知 当必须计算窗口的客户端区域的大小和位置时,将发送WM\u NCCALCSIZE消息。通过处理此消息,当窗口的大小或位置发生变化时,应用程序可以控制窗口客户端区域的内容 窗口通过其WindowProc功能接收此消息 wParam 如果wParam为TRUE,则它指定应用程序应指示客

如何设置Win32窗口(本机)的非客户端区域的大小

我想要的是使标题栏变粗

我已经阅读并被告知我应该处理WM_NCCALCSIZE,但我在文档中找不到任何明确的内容

来自MSDN:

WM\u NCCALCSIZE通知


当必须计算窗口的客户端区域的大小和位置时,将发送WM\u NCCALCSIZE消息。通过处理此消息,当窗口的大小或位置发生变化时,应用程序可以控制窗口客户端区域的内容

窗口通过其WindowProc功能接收此消息

wParam 如果wParam为TRUE,则它指定应用程序应指示客户端区域的哪个部分包含有效信息。系统将有效信息复制到新客户端区域内的指定区域。 如果wParam为FALSE,则应用程序不需要指示客户端区域的有效部分

lParam 如果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的值,您可以学到很多东西。

您的意思是要设置整个窗口的大小(包括非客户端区域),还是更改非客户端度量,如边框的宽度或标题栏的高度?刚刚编辑。我想把标题栏加厚。我确实画了非客户端部分,也知道WM_NCCALCSIZE,阅读了文档,但我不明白。是的,有点难。我有一些很久以前写的代码。我会看看能不能找到的。。非常感谢你!这个老掉牙的答案救了我的命!