我想要计算包含对话框的垂直和水平最小大小。 我使用GetClientRect来确定宽度和高度。然后,当需要一个垂直滚动条时,我添加了GetSystemMetrics(SM_CXVSCROLL)+ GetSystemMetrics(SM_CXSIZEFRAME),但我似乎出现了几个像素短。计算包含对话框所需的最小大小
GetSysMetrics在使用和不使用滚动条时是否需要考虑横向和纵向尺寸?
我想要计算包含对话框的垂直和水平最小大小。 我使用GetClientRect来确定宽度和高度。然后,当需要一个垂直滚动条时,我添加了GetSystemMetrics(SM_CXVSCROLL)+ GetSystemMetrics(SM_CXSIZEFRAME),但我似乎出现了几个像素短。计算包含对话框所需的最小大小
GetSysMetrics在使用和不使用滚动条时是否需要考虑横向和纵向尺寸?
您需要考虑窗口边界和其他非客户区空间。最简单的方法是使用AdjustWindowRect()
或AdjustWindowRectEx()
。但是,你仍然需要处理滚动条自己:
的AdjustWindowRectEx功能不走WS_VSCROLL或WS_HSCROLL风格的考虑。为了说明滚动条,使用SM_CXVSCROLL或SM_CYHSCROLL调用GetSystemMetrics函数。
因此,步骤是:
让你的最小尺寸客户区。
AdjustWindowRectEx()
根据您的窗口样式将客户端大小转换为窗口大小。
如果需要,请对滚动条(GetSystemMetrics()
与SM_CXVSCROLL
和/或SM_CYHSCROLL
)进行额外的调整。
谢谢,这就是诀窍!当然,因为添加垂直滚动条可能会导致需要水平滚动条,所以我的头部受伤。 – 2012-02-01 15:25:41