【发布时间】:2008-11-04 22:34:38
【问题描述】:
问题: 如何判断 CRichEditCtrl 中的选定文本是否有多种字体大小?
目标: 我正在制作自己的 RichEdit 工具栏(粗体、斜体、字体类型、字体大小等)。我想模仿 MS Word 在选择的文本具有多个跨越选择的单一字体大小时所做的事情。
Ex - 您有一行文本,前 10 个字符为 9 pt 字体,接下来的 15 个字符为 14 pt 字体。如果突出显示前 5 个字符,“字体点选择”下拉菜单将显示“9”。如果您随后选择前 20 个字符,则相同的下拉菜单应显示为空/空白。
到目前为止我做了什么: 当 CRichEditCtrl 中的选择发生变化时,我会收到必要的通知。另外,如果选择中只有一个字体大小,我可以弄清楚
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
CRichEditCtrl ctrl;
ctrl.GetSelectionCharFormat( cf );
int nFontPtSize = cf.yHeight / 20;
这将为我上面示例的第一种情况提供所需的信息。不幸的是,我在示例的第二部分中得到的信息似乎只给了我选择结束位置的信息(而不是整个选择)。
总之,在 CHARFORMAT 或我可以从 CRichEditCtrl 获得的其他一些结构中是否缺少一些信息,或者我可以做一些有趣的计算来决定选择中有多种尺寸?到目前为止,我唯一的想法是一次选择一个字符,看看该字符的当前字体大小是否与之前的任何字符不同。我主要只是希望我需要的信息在那里,我只是看不到它(以类似的方式从 CHARFORMAT 的 dwMask 成员告诉我,任何或所有粗体、斜体、下划线等都已打开)。
【问题讨论】: