MFC中多行静态文本的垂直居中

2022-05-12 00:00:00 multiline mfc vertical-alignment

如何使用文本自动换行(多行)使结果在控件的矩形中垂直居中?

我试图解决的问题是:我在CComboBox旁边有一个CStatic控件,它根据选择更新信息文本。此文本可以是短的,也可以是长的,这要求CStatic有时使用多行,有时不使用。我希望信息文本与CComboBox垂直居中对齐。

现在的问题是:

  • 如果我只将CStatic文本行设置为1行高,它看起来适合单行文本,但多行不适合并且不显示。

  • 如果我将CStatic调高以适合2行,它看起来适合长文本(2行),但1行文本向上移动,因为CStatic将文本在顶部对齐。CStatic和问题中提到的行为可以解决这个问题...

如果我不能轻松地获得垂直居中的CStatic多行控件,另一种方法是根据其中的文本量调整控件矩形的大小。但在这种情况下,我有一个不同的问题:

如何以编程方式确定文本在特定宽度的CStatic中需要多少行?


解决方案

遗憾的是,您不能使CStatic中的多行文本居中。

您的下一个问题有一个解决方案,但使用起来有点麻烦。您要做的是使用CDC::DrawTextExDT_CALCRECT标志来获取要格式化的文本的大小(以像素为单位)。通过将其除以文本行的高度(在字体信息中给出,您可以从DC获得),再加上一些我不确定有多大的间距--大概是一个固定的数量,我不认为您可以用DrawText指定行距),您将得到(近似值)您将获得的行数。然后可以调整控件RECT的大小。

想一想,最好不要转换为行,只需将控件的大小调整到您从DrawTextEx:)

获得的程度

此类操作通常需要进行一些试验才能完全正确,并且有时在不同操作系统版本之间的行为会有所不同。谨慎行事。

相关文章