【问题标题】:How to insert hyperlink without underline to Win32 RichEdit?如何在 Win32 RichEdit 中插入不带下划线的超链接?
【发布时间】:2016-04-20 01:52:08
【问题描述】:

我添加了到 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 类。

【问题讨论】:

    标签: c++ winapi hyperlink underline richedit


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用友好名称的超链接来做到这一点。这些让您可以指定用于显示的任意文本(连同其自己的颜色和格式),而实际的 URL 是隐藏的。

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

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

      MSDN 博文RichEdit Friendly Name Hyperlinks 对如何使用它们有更详细的描述。

      【讨论】:

      • 没用。我在问题中更新了我的代码。在您的链接中,他们说我可以更改链接的颜色,但无法隐藏下划线。该页面上的其他 cmets 也证实了这一点。
      【解决方案3】:

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

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

      【讨论】:

      • 投反对票的不是我。我以前试过,但不工作
      • 您的编辑中的 EM_AUTOURLDETECT 在哪里?试试 SendMessage(richEditHWND, EM_AUTOURLDETECT, 0, 0);
      • 我说我在上面的评论中试过了。顺便说一句,richedit控件默认是不开启检测url的。
      猜你喜欢
      • 2022-01-07
      • 2013-11-01
      • 1970-01-01
      • 2016-10-13
      • 1970-01-01
      • 2016-06-04
      • 2018-01-17
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多