如何制作一个带有文本自动换行(多行)的 CStatic
,使结果在控件的矩形中垂直居中?
我试图解决的问题是这样的:我在 CComboBox
旁边有一个 CStatic
控件,它根据选择更新信息文本。该文本可短可长,要求 CStatic 有时使用多行,有时则不使用。我希望信息文本与 CComboBox 垂直居中对齐。
现在问题是:
如果我将
<CStatic
设置为仅 1 行文本高,则它对于 1 行文本看起来不错,但多行不适合并且不会显示。如果我将
CStatic
调高以适合 2 行,那么它对于长文本(有 2 行)看起来不错,但 1 行文本会向上移动,因为CStatic
将文本对齐到顶部。具有问题中提到的行为的CStatic
可以解决这个问题...
如果我无法轻松获得垂直居中的 CStatic
多行控件,则替代方法是根据其中的文本量调整控件矩形的大小。但在这种情况下我有一个不同的问题:
如何以编程方式找出特定宽度的 CStatic
中文本需要多少行?
最佳答案
遗憾的是,您无法在 CStatic
中居中显示多行文本。
你的下一个问题有一个解决方案,但使用起来有点痛苦。您要做的就是使用 CDC::DrawTextEx 和 DT_CALCRECT 标志来获取要格式化的文本的大小(以像素为单位)。通过将其除以一行文本的高度(在您可以从 DC 获得的字体信息中给出)加上一些间距,我不确定它是多少 - 大概是一个固定的数量,我认为您不能使用 DrawText
指定行间距),您将获得(近似值)您将获得的行数。然后您可以调整控制矩形的大小。
想一想,您最好不要转换为线条,而只是将控件的大小调整到从 DrawTextEx
获得的范围:)
这样的事情通常需要一些实验才能完全正确,并且有时在操作系统版本之间的行为有所不同。谨慎行事。
关于mfc - MFC中多行cstatic文本垂直居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14829049/