如何在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
拼写。
注意 :任何代码都会发布到公共领域。 无需归属。