mfc - MFC中多行cstatic文本垂直居中

标签 mfc vertical-alignment multiline

如何制作一个带有文本自动换行(多行)的 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/

相关文章:

java - iText:PdfTable 单元格垂直对齐

python - 通过正则表达式获取重复内容

c++ - 如何在我的 C++ 应用程序中打开 exe 中的文件

winapi - 以无密码的用户身份启动服务

Android:多行EditText(文本区域)的垂直对齐

css - 左、中、右对齐 div 在同一行的底部

ios - 带自动换行的多行标签

tostring - 在用户选择的文本上保留换行符。目前正在尝试使用 window.getSelection()

c++ - 如何制作CDialog?

c++ - 运行时检查失败 #2 - 变量 'osvi' 周围的堆栈在 mfc 应用程序上已损坏