MFC中多行静态文本的垂直居中
如何使用文本自动换行(多行)使结果在控件的矩形中垂直居中?
我试图解决的问题是:我在CComboBox
旁边有一个CStatic
控件,它根据选择更新信息文本。此文本可以是短的,也可以是长的,这要求CStatic
有时使用多行,有时不使用。我希望信息文本与CComboBox
垂直居中对齐。
现在的问题是:
如果我只将
CStatic
文本行设置为1行高,它看起来适合单行文本,但多行不适合并且不显示。如果我将
CStatic
调高以适合2行,它看起来适合长文本(2行),但1行文本向上移动,因为CStatic
将文本在顶部对齐。CStatic
和问题中提到的行为可以解决这个问题...
如果我不能轻松地获得垂直居中的CStatic
多行控件,另一种方法是根据其中的文本量调整控件矩形的大小。但在这种情况下,我有一个不同的问题:
如何以编程方式确定文本在特定宽度的CStatic
中需要多少行?
解决方案
遗憾的是,您不能使CStatic
中的多行文本居中。
您的下一个问题有一个解决方案,但使用起来有点麻烦。您要做的是使用CDC::DrawTextEx
和DT_CALCRECT
标志来获取要格式化的文本的大小(以像素为单位)。通过将其除以文本行的高度(在字体信息中给出,您可以从DC
获得),再加上一些我不确定有多大的间距--大概是一个固定的数量,我不认为您可以用DrawText
指定行距),您将得到(近似值)您将获得的行数。然后可以调整控件RECT的大小。
想一想,最好不要转换为行,只需将控件的大小调整到您从DrawTextEx
:)
此类操作通常需要进行一些试验才能完全正确,并且有时在不同操作系统版本之间的行为会有所不同。谨慎行事。
相关文章