ann*_*nno 7 c winapi spell-checking richedit
我正在寻找一种方法在Rich Edit控件中制作红色波浪形下划线(我使用的是带有Msftedit.dll的4.1版本).我可以使用以下代码生成波浪形下划线:
CHARFORMAT2 format;
format.cbSize = sizeof(format);
format.dwMask = CFM_UNDERLINETYPE;
format.bUnderlineType = CFU_UNDERLINEWAVE;
SendMessage(hWndEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&format);
Run Code Online (Sandbox Code Playgroud)
MSDN文档未指定如何更改下划线的颜色,仅指定文本(带下划线)和文本背景.我发现一些代码表示使用低位半字节用于下划线类型(CFU_UNDERLINEWAVE)而上层用于颜色.所以我试过了:
format.bUnderlineType = CFU_UNDERLINEWAVE | 0x50;
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
UPDATE
我用3.0版本(Riched20.dll)测试了这段代码,它正在运行.所以问题在于4.1.该功能是否已移除或移至其他位置?
它也不适用于版本6(office 2007使用的dll).
扩展 DaveCamp 的答案,该CHARFORMAT2W结构包含一个bReserved1条目:
typedef struct _charformat2w
{
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
...
BYTE bReserved1;
} CHARFORMAT2W;
Run Code Online (Sandbox Code Playgroud)
但是如果你看看最新的(8.0)SDK,bReserved1条目现在已经被赋予了下划线颜色:
typedef struct _charformat2w
{
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
...
#if (_RICHEDIT_VER >= 0x0800)
BYTE bUnderlineColor; // Underline color
#endif
} CHARFORMAT2W;
Run Code Online (Sandbox Code Playgroud)
这被定义为 Widows 8 的一项功能 ( _RICHEDIT_VER >= 0x0800)。
设置下划线颜色的方法如Dave的回答:
CHARFORMAT2 format;
format.cbSize = sizeof(format);
format.dwMask = CFM_UNDERLINETYPE | CFM_UNDERLINE;
format.dwEffects = CFE_UNDERLINE;
format.bUnderlineType = CFU_UNDERLINEWAVE;
format.bUnderlineColor = 0x05;
SendMessage(hWndEdit,EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM) &format);
Run Code Online (Sandbox Code Playgroud)
剩下的技巧是颜色BYTE值。它们尚未记录在案,但有 16 种颜色:
UnderlineColor_Black = 0x00;
UnderlineColor_Blue = 0x01;
UnderlineColor_Aqua = 0x02;
UnderlineColor_Lime = 0x03;
UnderlineColor_Fuchsia = 0x04;
UnderlineColor_Red = 0x05;
UnderlineColor_Yellow = 0x06;
UnderlineColor_White = 0x07;
UnderlineColor_Navy = 0x08;
UnderlineColor_Teal = 0x09;
UnderlineColor_Green = 0x0A;
UnderlineColor_Purple = 0x0B;
UnderlineColor_Maroon = 0x0C;
UnderlineColor_Olive = 0x0D;
UnderlineColor_DkGray = 0x0E;
UnderlineColor_LtGray = 0x0F;
Run Code Online (Sandbox Code Playgroud)

编辑:将颜色名称从 更改Cyan为Aqua。修正了 的拼写Fuchsia。
注意:任何发布到公共领域的代码。无需归属。
很抱歉这么说,但是如果 Microsoft 没有记录更改下划线的颜色,那么您不应该使用它。像这样未记录的功能可能会在以后的版本中被删除,这可能已经发生在这里。
最好的办法是询问微软。