如何在Rich Edit控件(Win32 / C)中更改下划线颜色

我正在寻找一种方法在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); 

MSDN文档未指定如何更改下划线的颜色,仅指定文本(带下划线)和文本背景。 我发现了一些代码,它们使用较低的半字节作为下划线类型(CFU_UNDERLINEWAVE),而较高的字母表示颜色。 所以我试过了:

 format.bUnderlineType = CFU_UNDERLINEWAVE | 0x50; 

但这不起作用。

UPDATE

我已经使用3.0版(Riched20.dll)测试了这段代码并且它正在运行。 所以问题在于4.1。 该function是否已删除或移至其他位置?

它也不适用于版本6(office 2007使用的dll)。

很抱歉这样说,但如果Microsoft没有记录更改下划线的颜色,则不应使用它。 像这样的未记录的特征将在以后的版本中删除,这可能发生在这里。

你最好的办法就是问问微软。

我知道这是在挖掘一个旧线程,但我只是在网上搜索了几个小时寻找答案,但到处找到类似的答案!

这实际上是由Microsoft( http://msdn.microsoft.com/en-gb/library/windows/desktop/bb787883 ( v=vs.85 ) .aspx )记录的,并且很容易做到,一旦你知道怎么样! 我刚刚设法在Windows7和Windows8上使用msftedit.dll中的RichEdit50W控件。

需要注意的一点是,Win8中的颜色索引是不同的。 对于RED,我必须使用颜色0x06而不是0x05。

好的,这是你需要做的:

 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); 

扩展DaveCamp的答案, CHARFORMAT2W结构包含一个bReserved1条目:

 typedef struct _charformat2w { UINT cbSize; DWORD dwMask; DWORD dwEffects; ... BYTE bReserved1; } CHARFORMAT2W; 

但是如果你看一下最新的(8.0)SDK, bReserved1条目现在已经被赋予了下划线颜色

 typedef struct _charformat2w { UINT cbSize; DWORD dwMask; DWORD dwEffects; ... #if (_RICHEDIT_VER >= 0x0800) BYTE bUnderlineColor; // Underline color #endif } CHARFORMAT2W; 

这被定义为Widows 8function( _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); 

剩下的技巧是颜色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; 

在此处输入图像描述

编辑 :将颜色名称从Cyan更改为Aqua 。 修正了Fuchsia拼写。

注意 :任何代码都会发布到公共领域。 无需归属。