【问题标题】:How to wrap text for CButton checkbox if texts overruns the window width MFC?如果文本超出窗口宽度 MFC,如何为 CButton 复选框换行?
【发布时间】:2017-08-05 05:24:47
【问题描述】:

我有一个复选框,它几乎位于窗口宽度的末尾(行尾),所以如果我翻译文本,它会超出窗口。

 CButton checkbox;
 CString str = "Cropped Value Of CheckBox";
 checkbox.create(str,WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_AUTOCHECKBOX, CRect(0,0,0,0), this, CHECK_ID);

现在,如果 str 的长度太长以至于超出屏幕截图所示的窗口:

我想换行这个文本,这样如果复选框文本的长度太长,它会将文本换行到下一行,并根据窗口的大小进行调整。

【问题讨论】:

  • 您需要使用 DT_CALCRECT 对按钮文本进行 DrawText 以查看矩形的高度并相应地调整按钮的大小。
  • 您为什么不遵循 Microsoft 国际化指南?它建议您“设计菜单和对话框,为文本扩展留出空间。例如,英语字符串在翻译成德语或荷兰语时通常会扩展 40%。”您的方法最终可能会使对话框控件间距变得混乱。
  • 按钮的大小随着文本的大小而增加。它是我们第一次加载窗口时的窗口大小。

标签: c++ checkbox text mfc word-wrap


【解决方案1】:

使用BS_MULTILINE 按钮样式。

要设置该样式,请使用以下 API 函数:

CButton::SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE)

checkbox.SetButtonStyle(BS_MULTILINE);

文档链接:

https://msdn.microsoft.com/en-us/library/yf1wax6c.aspx#cbutton__setbuttonstyle

【讨论】:

  • 试过了,但它截断了文本,不知道为什么。此外,多行并没有根据窗口的大小弯曲,即如果有足够的空间放置文本,则文本仍以多行显示。
猜你喜欢
  • 2023-04-07
  • 2022-01-08
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多