也许对 RichEdit 控件有经验的人可以帮助我解决这个问题。
我正在尝试使用 RichEdit 控件中当前选择的字体属性来初始化“选择字体通用对话框”。这个普通对话使用了
LOGFONT
结构,而EM_GETCHARFORMAT
消息需要一个CHARFORMAT2W
结构。
从一种结构转换为另一种结构非常简单,除了字体“Weight”成员。
EM_GETCHARFORMAT
总是为该成员返回零,尽管所有其他结构成员都已正确初始化。
一个可能的解决方法是检查
dwEffects
结构的CHARFORMAT2W
成员是否包含CFE_BOLD
标志,然后手动将LOGFONT
权重设置为700,如果有,则为400。这对于常规字体和粗体字体非常有效,通用对话框已正确初始化,但对于窄字体和半粗体字体(基本上,除 400 或 700 之外的任何字体粗细)它会失败。
EM_SETCHARFORMAT
消息可以正确设置字体粗细值,因此问题仅在尝试用EM_GETCHARFORMAT
读回时出现。我什至试过问 ChatGPT,它提供了一个完全无用的答案,将 dwMask
成员设置为 CFM_WEIGHT
,这没有做任何事情,因为 EM_GETCHARFORMAT
完全忽略了 dwMask
成员。
这是 RichEdit 控件的已知错误吗?无论版本如何(
riched20.dll
或 msftedit.dll
),它的行为都是一样的。