如何插入超链接而不带下划线到 Win32 RichEdit

How to insert hyperlink without underline to Win32 RichEdit?

本文关键字:下划线 RichEdit Win32 超链接 何插入 插入      更新时间:2023-10-16

我添加了一个指向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的背景颜色,但这是一种黑客方式,使字符像q,j,...被切开,在选择文本时也显示该行。
那么正确的方法是什么呢?
注意:我正在使用RICHEDIT50W类。

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

默认情况下,友好名称超链接文本也显示为蓝色 带有蓝色下划线,除非名称文本的格式为 露骨的颜色。显式格式优先

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

MSDN 博客文章 RichEdit 友好名称超链接提供了有关如何使用它们的更详细说明。

我最近遇到了同样的问题,我只是发现这是 Richedit 库的错误。当我将其从 v4.1 更新到 v5.0 时,下划线可以毫无问题地删除

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

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