Blu*_*erk 4 windows delphi winapi themes
如何获取 Windows XP 及更高版本中主题编辑控件的边框(非客户端)宽度?
在 Windows 7 上GetThemeMetric,使用TMT_BORDERSIZEas 属性标识符对于现有编辑控件返回 0,如果未提供句柄,则返回 1。但仔细一看,似乎应该是2。
当控件包含WS_VSCROLL或WS_HSCROLL窗口样式时,滚动条将绘制在该边框内,并且它们确实距离控件的外边缘 2 个像素,因此我假设有一种方法可以获得正确的信息。
查询的原因是我能够在WM_NCCALCSIZE创建自定义控件时设置客户区域大小。
如何获取 Windows XP 及更高版本中主题编辑控件的边框(非客户端)宽度?
以下内容适用于所有控件,无论它们是否有主题。它甚至不需要主题 API。
GetClientRect()以获取客户区的大小。ClientToScreen()将客户端矩形转换为屏幕坐标。GetWindowRect()以获取屏幕坐标中的控件矩形(包括 NC 区域)。leftBorderWidth = clientRect.left - windowRect.left)。编辑:
有趣的是,Wine 源theme_edit.cGetThemeMetric()根本没有使用。相反,他们GetSystemMetrics()用SM_CXEDGE和来调用SM_CYEDGE。
在我的系统(Windows 7 和 Windows 10)上,这会返回正确的2.