c - 如何设置Win32窗口非客户区的大小(native)

标签 c winapi

如何设置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/

相关文章:

python - OSX iTerm2 可以将鼠标与 python-ncurses 一起使用,但不能与 C 中的curses一起使用

c - 先学C再学Objective-C

c++ - 检查文本框控件是否为空 C++ Win32

c - 有效地为不同的 Windows 版本使用不同的 API

windows - Windows 到底是什么版本?

c - printf 不产生输入值

sql - 如何格式化 SQL 表查询?

c - 如果 Windows UAC 被拒绝,有没有办法让代码以较低的权限运行

c - 如何将对话框(从资源文件)添加到选项卡

c++ - 自定义最小最大关闭按钮实现