5

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

我要解决的问题是:我在 aCStatic旁边有一个控件,CComboBox它根据选择更新信息文本。这段文字可以很短也可以很长,CStatic有时需要使用多行,有时不需要。我希望信息文本与CComboBox.

现在问题来了:

  • 如果我将CStatic唯一的 1 个文本行设为高,则它对于 1 行文本看起来不错,但多行不适合且不显示。

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

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

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

4

1 回答 1

4

不幸的是,您不能在CStatic.

您的下一个问题有一个解决方案,但使用起来有点麻烦。您所做的是使用CDC::DrawTextEx标志DT_CALCRECT来获取要格式化的文本的大小(以像素为单位)。通过将其除以一行文本的高度(在字体信息中给出,您可以DC从可以用 ) 指定行距DrawText,您将获得(近似值)您将获得的行数。然后,您可以调整控件矩形的大小。

想一想,您最好不要转换为线条,只需将控件的大小调整到您从中获得的程度DrawTextEx:)

Things like this usually require some experimentation to get exactly right, and sometimes behave differently between OS versions. Proceed with caution.

于 2013-02-12T10:29:45.197 回答