如何将没有下划线的超链接插入Win32 RichEdit?

时间:2016-01-14 16:26:18

标签: c++ winapi hyperlink underline richedit

我添加了一个RichEdit链接,使用CFM_LINK / CHARFORMAT2结构。但我无法弄清楚如何去除下划线效果。我试过了:

SendMessage(richEditHWND, EM_AUTOURLDETECT, FALSE, NULL);
SendMessage(richEditHWND, EM_SETEDITSTYLEEX, 0, SES_EX_HANDLEFRIENDLYURL);

CHARFORMAT2 cf2;
memset(&cf2, 0, sizeof(CHARFORMAT2));
cf2.dwMask = CFM_LINK| CFM_UNDERLINE | CFM_COLOR | CFM_LINKPROTECTED;
cf2.dwEffects = CFE_LINK| CFE_UNDERLINE | CFE_LINKPROTECTED;
cf2.crTextColor = RGB(255, 0, 0);
cf2.bUnderlineType = CFU_UNDERLINENONE;
SendMessage(richEditHWND, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf2);

但它不起作用。
另一种方法是将下划线颜色设置为白色,这是RichEdit背景颜色,但它是一种hacky方式,使q,j,...等字符被分开,在选择文本时也显示该行。
那么这样做的正确方法是什么?
注意:我正在使用RICHEDIT50W类。

3 个答案:

答案 0 :(得分:2)

您可以使用友好名称超链接来执行此操作。这些允许您指定用于显示的任意文本(以及它自己的颜色和格式),并隐藏实际的URL。

  

默认情况下,友好名称超链接文本也以蓝色显示   除非使用。格式化名称文本,否则使用蓝色下划线   明确的颜色。显式格式优先

显示的文字需要具有CFE_LINKCFE_LINKPROTECTED样式,以及明确的颜色和格式样式。然后使用ITextRange2::SetURL方法设置URL。

MSDN博客文章RichEdit Friendly Name Hyperlinks详细介绍了如何使用它们。

答案 1 :(得分:0)

我最近遇到了同样的问题,我发现它是Richedit库的一个错误。当我从v4.1更新到v5.0时,可以删除下划线而没有任何问题

答案 2 :(得分:-2)

尝试使用wParam = 0,lParam = 0发送EM_AUTOURLDETECT消息到RichEdit控件

"指定0以禁用自动链接检测...":https://msdn.microsoft.com/en-us/library/windows/desktop/bb787991(v=vs.85).aspx