【问题标题】:How to adjust font size on CEditbox to fit the text?如何调整 CEditbox 上的字体大小以适合文本?
【发布时间】:2019-09-20 12:08:57
【问题描述】:

我在工作中使用 MFC 框架。

我有一个显示状态的CEdit 控件。

如何更改字体大小以使文本适合?
(IOW,我希望字体大小尽可能大,以便文本适合。)

加分项:如何使文本居中?

我不是 MFC 框架方面的专家。

以下是一些将显示的示例文本:

通过
失败
失败 - 自检
自测通过

【问题讨论】:

  • 如果您将“FAILED - SELF TEST”设置为与“PASSED”相同的宽度,通过减小字体大小,字体将太小且不可读。我认为您的问题措辞不正确。要居中,请转到对话框编辑器,将“对齐”选项设置为居中,或在 CEdit 上调用 edit.ModifyStyle(0, ES_CENTER)。或者使用CStatic显示只读信息。
  • 大小对信息进行编码。虽然开发人员可能希望通过使用最佳大小的字体来有效地使用屏幕空间,但 UI 设计师肯定会反对。不同的字体大小不仅使 UI 看起来不一致,而且还被认为传达了额外的信息。由于信息是“每个可用屏幕区域的文本宽度”,这不是用户感兴趣的指标。有时最好的代码是您不编写的代码。

标签: fonts visual-studio-2017 mfc editbox


【解决方案1】:

首先,编辑框是允许用户键入文本的 UI 项,但您发布的示例字符串看起来更像是状态或结果。用户是否必须输入诸如“FAILED - SELF TEST”之类的内容?正如@Barmak Shemirani 建议的那样,我认为您更需要一个只读控件,例如静态控件(通常是凹陷、蚀刻或静态边缘样式)。

无论如何,我会推荐以下内容:

  • 首先,如果有空间,请考虑扩大控件。通常,对话框上的所有控件都使用相同的字体(默认情况下)。让一些控件使用不同的字体可能看起来很奇怪(尽管可能可以接受)。
  • 其次(如果您不放大控件),尝试字体大小,然后尝试以编程方式设置字体大小:将文本设置为 FAILED - SELF TEST(最长),然后“手动”设置字体大小最大可能(以便文本适合),看看您是否得到可接受的结果。

如果是这样,您可以通过编程方式设置字体大小。 MFC 在某种程度上是 WinAPI 的“瘦包装器”,所有 WinAPI 项都可以作为 MFC 类的公共成员访问(例如,m_hWnd 是任何CWnd 派生类的 WinAPI 窗口的句柄),所以你宁愿在这里工作在 WinAPI 级别。您应该在初始化期间检查/设置字体大小(WM_INITDIALOG 消息,映射到 OnInitDialog() 处理程序)。这些是步骤:

  • 检查(默认)字体是否正常:使用DrawText() 函数并设置DT_CALCRECT 标志。这实际上不会绘制任何文本,而是会返回所需的大小(矩形)。也添加一些边距(请进行实验,但它应该至少为 4 个像素 - 框架有两条垂直线,每边 1 个像素)。如果这小于或等于控件的大小(或者,您可以使用没有额外边距的文本宽度与控件的客户区进行测试,而不是总大小),这意味着默认字体是可以的,不需要其他操作。
  • 如果不是,则获取控件的字体,并创建一个具有相同参数的新字体,但大小应减 1(注意lfHeight 参数或成员,如果为负数,则应改为“增加”)。现在检查此字体是否正常,如果不适合则重复此步骤直到文本适合。
  • 我不建议尝试增加字体大小,因为这也需要针对控件的高度进行测试,但如果您愿意...

希望这会有所帮助,虽然我不知道这是否值得。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 1970-01-01
    • 2015-12-10
    • 2016-04-26
    • 2011-11-24
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多