【问题标题】:How to find the maximum length of string of particular fontsize that can come in a CEDIT rectangle in MFC?如何在 MFC 的 CREDIT 矩形中找到特定字体大小的字符串的最大长度?
【发布时间】:2021-02-10 13:37:05
【问题描述】:

我正在尝试找出可以在 MFC 中的 CEDIT 矩形中出现的特定字符串的最大字体大小。

我想要的是:

int maxFontSizeThatCanResideInCedit(string text){
    do something
    return fontSize;
}

我在想的是,如果我能以某种方式找到像素长度/宽度并将字符串与每种字体进行比较。 我是 MFC 的新手,所以我不知道该怎么做? 目前我被这个问题困住了吗?

【问题讨论】:

  • 这甚至无法理解问题域的基础知识。很明显,字符串 "WWW" 和 "iii" 具有非常不同的空间要求,即使它们具有相同的 stringLength。您的函数至少需要以下参数:实际字符串、要使用的字体和设备上下文。
  • @IInspectable 很抱歉给您带来不便。我应该给出字符串而不是字符串大小。感谢您指出。使用字符串,我们可以计算每个字符的宽度。请帮助我找到解决方案。我还编辑了问题/。

标签: c++ visual-c++ mfc


【解决方案1】:

DrawText 将您的字符串与DT_CALCRECT 一起计算矩形,DT_EDITCONTROL 应用编辑控件行为。

应该先在Device Context中选择字体。

注意字符串长度是不够的,因为很多字体不是固定宽度的。

【讨论】:

    【解决方案2】:

    不会编写答案,但会通过它来讨论...

    首先,编辑控件将具有字体。首先您必须知道编辑控件将使用什么字体名称和字体大小。

    您可能希望默认为GetStockObject(DEFAULT_GUI_FONT) 或不。但是,这可能是一个不错的起点。

    您可以创建信息上下文。

    CDC ic;
    ic.CreateIC("display", 0, 0, 0); // from memory, so check
    

    您可以从那里选择字体到 ic。 (记得在调用析构函数之前将其重置为原始)

    拥有 ic 后,您希望获取文本指标;

    TEXMETRIC tm;
    ic.GetTextMetrics(&tm);
    
    int nMaxCharWidth = tm.tmMaxCharWidth;
    

    所以这是字体中任何字符的最大宽度。如果要 8 个字符,宽度为 8*nMaxCharWidth

    但是,也许您想使用平均值?

    int nAveCharWidth = tm.tmAveCharWidth;
    

    那么宽度将是 nDesiredChars*nAveCharWidth 其中 nDesiredChars... 算了。

    [编辑]

    忘记高度了。查看TEXTMETRIC 结构。它有高度成员。你可以想办法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2010-12-03
      相关资源
      最近更新 更多