向 RichEdit 控件发送“EM_GETCHARFORMAT”消息总是为字体“Weight”返回零

问题描述 投票:0回答:0

也许对 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
),它的行为都是一样的。

winapi richedit
© www.soinside.com 2019 - 2024. All rights reserved.