如何使用文本自动换行(多行)创建一个CStatic
,它会在控件的矩形中垂直居中?
我正在尝试解决的问题是:我在CStatic
旁边有一个CComboBox
控件,根据选择更新信息文本。此文本可以是短文本也可以是长文本,要求CStatic
有时使用多行,有时不需要。我希望信息文本与CComboBox
垂直居中对齐。
现在问题在于:
如果我将CStatic
只有1个文本行设置为高,则对于单行文本看起来很好,但是多行不适合且不会显示。
如果我使CStatic
更高以适合2行,那么对于长文本(有2行)看起来很好,但是1行文本向上移动,因为CStatic
对齐顶部的文本。具有问题中提到的行为的CStatic
将解决此问题......
如果我不能轻易获得垂直居中的CStatic
多行控制,则替代方法是根据其中的文本量调整控件的大小。但在这种情况下,我有一个不同的问题:
如何以特定宽度的CStatic
以编程方式查找文本需要多少行?
答案 0 :(得分:3)
很遗憾,您无法在CStatic
。
您的下一个问题有一个解决方案,但使用起来有点痛苦。您所做的是使用带有CDC::DrawTextEx
标记的DT_CALCRECT
来获取要格式化的文本的大小(以像素为单位)。将它除以文本行的高度(在DC
中可以得到的字体信息中给出,加上一些我不确定多少的间距 - 可能是固定数量,我不要认为你可以用DrawText
指定行间距,你会得到(近似值)你得到的行数。然后,您可以调整控件rect的大小。
考虑到这一点,你可能最好不要转换为行,只需调整控件的大小,使其达到DrawTextEx
的程度:)
这样的事情通常需要一些实验来完全正确,有时在OS版本之间表现不同。谨慎行事。