我想计算包含对话框的垂直和水平最小尺寸。我使用 GetClientRect 来确定宽度和高度。然后对于需要垂直滚动条时的宽度,我添加了 GetSystemMetrics (SM_CXVSCROLL) + GetSystemMetrics (SM_CXSIZEFRAME) 但我似乎少了几个像素。
对于有和没有滚动条的水平和垂直维度,我需要考虑什么 GetSysMetrics?
我想计算包含对话框的垂直和水平最小尺寸。我使用 GetClientRect 来确定宽度和高度。然后对于需要垂直滚动条时的宽度,我添加了 GetSystemMetrics (SM_CXVSCROLL) + GetSystemMetrics (SM_CXSIZEFRAME) 但我似乎少了几个像素。
对于有和没有滚动条的水平和垂直维度,我需要考虑什么 GetSysMetrics?
您需要考虑窗口边框和其他非客户区空间。最简单的方法是使用AdjustWindowRect()
or AdjustWindowRectEx()
。但是,您仍然需要自己处理滚动条:
从文档中:
AdjustWindowRectEx 函数不考虑 WS_VSCROLL 或 WS_HSCROLL 样式。要考虑滚动条,请使用 SM_CXVSCROLL 或 SM_CYHSCROLL 调用 GetSystemMetrics 函数。
所以,步骤是:
GetClientRect()
获得您的最小客户区域。
AdjustWindowRectEx()
根据您的窗口样式将客户端大小转换为窗口大小。
如果需要,应用额外的调整来考虑滚动条(GetSystemMetrics()
使用SM_CXVSCROLL
和/或SM_CYHSCROLL
)。