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中多行静态文本的垂直居中
- 从父 CMakeLists.txt 覆盖 CMake 中的默认选项(...)值 2021-01-01
- OpenGL 对象的 RAII 包装器 2021-01-01
- 将函数的返回值分配给引用 C++? 2022-01-01
- 哪个更快:if (bool) 或 if(int)? 2022-01-01
- 如何提取 __VA_ARGS__? 2022-01-01
- XML Schema 到 C++ 类 2022-01-01
- 使用 __stdcall & 调用 DLLVS2013 中的 GetProcAddress() 2021-01-01
- DoEvents 等效于 C++? 2021-01-01
- 将 hdc 内容复制到位图 2022-09-04
- GDB 不显示函数名 2022-01-01