MFC中多行cstatic文本的垂直居中

时间:2013-02-12 09:14:04

标签: mfc vertical-alignment multiline

如何使用文本自动换行(多行)创建一个CStatic,它会在控件的矩形中垂直居中?

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

现在问题在于:

  • 如果我将CStatic只有1个文本行设置为高,则对于单行文本看起来很好,但是多行不适合且不会显示。

  • 如果我使CStatic更高以适合2行,那么对于长文本(有2行)看起来很好,但是1行文本向上移动,因为CStatic对齐顶部的文本。具有问题中提到的行为的CStatic将解决此问题......

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

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

1 个答案:

答案 0 :(得分:3)

很遗憾,您无法在CStatic

中发布多行文字

您的下一个问题有一个解决方案,但使用起来有点痛苦。您所做的是使用带有CDC::DrawTextEx标记的DT_CALCRECT来获取要格式化的文本的大小(以像素为单位)。将它除以文本行的高度(在DC中可以得到的字体信息中给出,加上一些我不确定多少的间距 - 可能是固定数量,我不要认为你可以用DrawText指定行间距,你会得到(近似值)你得到的行数。然后,您可以调整控件rect的大小。

考虑到这一点,你可能最好不要转换为行,只需调整控件的大小,使其达到DrawTextEx的程度:)

这样的事情通常需要一些实验来完全正确,有时在OS版本之间表现不同。谨慎行事。