如何找到可以在 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设备上下文中的字体优先。
请注意,字符串长度不够,因为许多字体的宽度不固定。
我正在尝试找出可以出现在 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设备上下文中的字体优先。
请注意,字符串长度不够,因为许多字体的宽度不固定。