如何找到可以在 MFC 中的 CEDIT 矩形中出现的特定字体大小的字符串的最大长度?

How to find the maximum length of string of particular fontsize that can come in a CEDIT rectangle in MFC?

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

我想要的是:

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

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

不会编码答案,但会讨论...

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

您可能想要默认为 GetStockObject(DEFAULT_GUI_FONT) 或不。但是,这可能是一个很好的起点。

您可以创建信息上下文。

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

从那里你可以select将字体放入ic中。 (调用desctructor前记得重置为原来的样子)

获得 ic 后,您想要获取文本指标;

TEXMETRIC tm;
ic.GetTextMetrics(&tm);

int nMaxCharWidth = tm.tmMaxCharWidth;

这就是字体中任何字符的最大宽度。如果要8个字符,那么宽度就是8*nMaxCharWidth.

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

int nAveCharWidth = tm.tmAveCharWidth;

然后宽度将是 nDesiredChars*nAveCharWidth,其中 nDesiredChars... 算了吧。

[编辑]

忘了身高。查看 TEXTMETRIC 结构。它有高度成员。你自己想办法吧。

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

应该select设备上下文中的字体优先。

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