Vertical centering of multi-line cstatic text in MFC(MFC中多行静态文本的垂直居中)
问题描述
如何使用文本自动换行(多行)使结果在控件的矩形中垂直居中?
我试图解决的问题是:我在CComboBox
旁边有一个CStatic
控件,它根据选择更新信息文本。此文本可以是短的,也可以是长的,这要求CStatic
有时使用多行,有时不使用。我希望信息文本与CComboBox
垂直居中对齐。
现在的问题是:
如果我只将
CStatic
文本行设置为1行高,它看起来适合单行文本,但多行不适合并且不显示。如果我将
CStatic
调高以适合2行,它看起来适合长文本(2行),但1行文本向上移动,因为CStatic
将文本在顶部对齐。CStatic
和问题中提到的行为可以解决这个问题...
如果我不能轻松地获得垂直居中的CStatic
多行控件,另一种方法是根据其中的文本量调整控件矩形的大小。但在这种情况下,我有一个不同的问题:
如何以编程方式确定文本在特定宽度的CStatic
中需要多少行?
推荐答案
遗憾的是,您不能使CStatic
中的多行文本居中。
您的下一个问题有一个解决方案,但使用起来有点麻烦。您要做的是使用CDC::DrawTextEx
和DT_CALCRECT
标志来获取要格式化的文本的大小(以像素为单位)。通过将其除以文本行的高度(在字体信息中给出,您可以从DC
获得),再加上一些我不确定有多大的间距--大概是一个固定的数量,我不认为您可以用DrawText
指定行距),您将得到(近似值)您将获得的行数。然后可以调整控件RECT的大小。
想一想,最好不要转换为行,只需将控件的大小调整到您从DrawTextEx
:)
此类操作通常需要进行一些试验才能完全正确,并且有时在不同操作系统版本之间的行为会有所不同。谨慎行事。
这篇关于MFC中多行静态文本的垂直居中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MFC中多行静态文本的垂直居中
基础教程推荐
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 设计字符串本地化的最佳方法 2022-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- C++,'if' 表达式中的变量声明 2021-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31