如何获得Windows XP及更高版本中主题Edit控件的边框(非客户端)的宽度?
在Windows 7 GetThemeMetric
上,TMT_BORDERSIZE
作为属性标识符,对于现有编辑控件,返回0;如果未提供句柄,则返回1。但经过仔细检查,它似乎应该是2。
当控件包含WS_VSCROLL
或WS_HSCROLL
窗口样式时,滚动条会在该边框内绘制,它们确实距离控件的外边缘2个像素,所以我假设有获取正确信息的方法。
查询的原因是我可以在创建自定义控件时WM_NCCALCSIZE
出现时设置客户区大小。
答案 0 :(得分:4)
如何获得主题编辑的边框(非客户端)的宽度 Windows XP及更高版本中的控件?
以下适用于所有控件,无论它们是否为主题。它甚至不需要主题API。
GetClientRect()
以获取客户区的大小。ClientToScreen()
将客户端矩形转换为屏幕坐标。GetWindowRect()
以屏幕坐标显示控件的矩形,包括NC区域。leftBorderWidth = clientRect.left - windowRect.left
)。修改强>
有趣的是,葡萄酒来源theme_edit.c根本不使用GetThemeMetric()
。相反,他们使用SM_CXEDGE
和SM_CYEDGE
来呼叫GetSystemMetrics()
。
在我的系统(Windows 7和Windows 10)上,这会返回正确的2
值。