RichEdit中支持超链接的实现

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

  现在很多IM软件的聊天对话框在接收到网站URL的时候,都能够显示成大家熟悉的蓝色,鼠标移到链接上,还会出现手样的鼠标指针,用户点击后就可以直接打开相应的URL,这对IM软件确实很有用吧,这么方便,实现起来难吗?其实一点也不难,只要设置让你的RICHEDIT支持链接,自动检测URL就行了,再实现一个对连接点击的响应函数就行了。总的来说就几行代码,看看吧。

  我用一个对话框工程来说明一下吧。

  首先,生成一个对话框工程,在界面上加入一个RichEdit控件,并用向导添加一个代码该控件的控件类成员变量,就叫m_re吧。

  现在,该让控件支持超链接和自动检测URL了,在对话框类的OnInitDialog()函数中,我们加入下面的代码就行了:

   DWORD Mask = m_re.GetEventMask();
    Mask = Mask | ENM_LINK  | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS;
    m_re.SetEventMask(Mask); 
    ::SendMessage(m_re.m_hWnd, EM_AUTOURLDETECT, true, 0);

这时候,如果编译运行,你在RICHEDIT中输入如www.163.com的话,它会显示成蓝色,鼠标移到链接上,还会出现手样的鼠标指针,但点击链接的时候它什么也不做,因为我们还没有告诉电脑,我们点击链接后它该帮我们做什么。下面我们就通过一个函数告诉电脑,请帮我打开这个链接。

  打开链接。在对话框类头文件的消息函数声明域内声明我们的链接点击通知函数

afx_msg void OnRichEditLink(NMHDR* in_pNotifyHeader, LRESULT* out_pResult );

然后,在对话框的CPP文件中,把我们的点击链接的消息和我的响应函数映射起来

ON_NOTIFY(EN_LINK, IDC_RICHEDIT1, OnRichEditLink )

最后就是实现我们的响应函数了:

ENLINK* l_pENLink = ( ENLINK* )in_pNotifyHeader ;
 *out_pResult = 0 ;
 switch( l_pENLink->msg )
 {
 default:{}
  break ;
  
 case WM_LBUTTONDOWN://如果鼠标左键被点击
  {
   CString strURL ;
   CHARRANGE crCharRange ;
   CRichEdit * pTempEdit;
   pTempEdit = (CRichEdit*)CRichEdit::FromHandle(l_pENLink->nmhdr.hwndFrom);
   pTempEdit->GetSel( crCharRange ) ;//得到原来选中的字符
   pTempEdit->SetSel( l_pENLink->chrg ) ;//设置RUL被选中

  strURL = pTempEdit->GetSelText() ;//得到URL
   pTempEdit->SetSel( crCharRange ) ;//恢复原来被选中的字符
   CWaitCursor l_WaitCursor ;

 //用当前默认的浏览器打URL
   ShellExecute( this->GetSafeHwnd(), _T( "open" ),strURL, NULL, NULL, SW_SHOWNORMAL ) ;
   *out_pResult = 1 ;
  }
  break ;
  
 case WM_LBUTTONUP:
  {
   *out_pResult = 1 ;
  }
  break ;
 }

就这么多了,没有了,编译运行吧。

《Windows API每日一练》11.4 Richedit控件 在使用 RichEdit 控件时,可以通过代码创建控件实例并进行初始化,也可以在资源编辑器中添加 RichEdit 控件并在程序中获取该控件的句柄进行操作。在上述示例中,通过捕获 WM_COMMAND 和 WM_NOTIFY 消息,并根据消息的参数进行判断,可以处理 RichEdit 控件的命令消息和通知消息。根据具体的消息类型和参数,可以执行相应的处理逻辑。●超链接RichEdit 控件支持文本中的超链接,可以将文本或图片转换为可点击的链接,点击链接时可以执行相应的操作,如打开网址、跳转到其他部分等。 阅读详情

相关推荐

Delphi实现RichEdit控件的链接功能

RichEdit控件是一个强大的文本编辑器组件,它允许用户在应用程序中编辑文本内容,支持多种文本格式和样式。使用RichEdit控件时,开发者可以实现文本的加粗、斜体、下划线、字体变化等格式化操作,还可以插入图片和超链接。// Delphi中添加RichEdit控件的示例代码varbeginend;在Delphi中,SelText属性属于TRichEdit控件,用于获取或设置当前选中文本的内容。

weixin_42612405的博客 1272

RichEdit选中行高亮显示及加入超链接-代码

RichEdit选中行高亮显示及加入链接-代码-选中当前行变成红色,超链接显示。

RichEdit控件中实现图片显示的完整技术方案

为进一步增强可维护性,可在异常处理块中集成日志写入功能:if (hFile!此函数可在__except块中调用,形成完整的错误追踪链。

weixin_35516624的博客 1181

delphi richedit中的URL加下划线

richedit中的URL加下划线点击自动会在浏览器中打开。

richedit实现超链接

刚在做小飞鸽的文件传送,要在richeidt上提示:XXX向你发送了XX文件,是 否接收,是和否都要使用超链接, 贴个代码吧:   [cpp] view plaincopyprint? int nTotalLen = m_EidtRecod.GetWindowTextLength();  m_EidtRecod.SetSel(nTotalLen, nTotalLen);

houziwo的专栏 1165

RichEdit中加超链接

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, But

自由程序员(网络偏执狂)- epzk 1045

RichEdit2.0中加超链接

1.首先支持2.0LoadLibrary("RICHED20.DLL");2. 这个函数把选中的内容变成超链接void CMyEdit::SetLink(){CHARFORMAT2 cf2;ZeroMemory(&cf2, sizeof(CHARFORMAT2));//cf2.cbSize = sizeof(CHARFORMAT2);cf2.dwMask = CFM_LINK;cf2.dwEffe

Civet148的专栏 1852

在 wxWidgets 中使用 RichEdit超链接自动识别

http://blog.csdn.net/joliny/article/details/3507268   wxWidgets 中没有专门的 wxRichTextCtrl 类,只有 wxTextCtrl 类,要使用 RichEdit 的话只要在创建 wxTextCtrl 控件时指定 wxTE_RICH 或 wxTE_RICH2 属性即可,另外要让 RichEdit超链接自动识别还要加上 w

l799623787的专栏 557

RichEdit 各个版本介绍

RichEdit 各个版本介绍

jhfyuf的博客 1514

delphi源码RichEdit加入链接

delphi源码RichEdit加入链接

RichEdit图片

RichEdit图片

duilib的richedit中嵌入超链接

duilib里面,给richedit控件添加超链并处理点击响应的演示。

学习并记录 1064

Memo与RichEdit组件对比及实际应用详解

RichEdit的强大功能不仅依赖于窗口消息机制,更深层地建立在其暴露的COM接口体系之上。其中最为重要的是接口,它是访问和控制整个文档内容的核心入口点。当RichEdit控件创建完成后,可通过发送消息获取指向的指针,进而查询接口。以下是使用C++/Win32 API获取该接口的典型流程:参数说明与逻辑解析::此消息请求RichEdit返回其内部的OLE接口包装器。pUnk:接收IUnknown*类型的接口指针,是所有COM接口的基类。

weixin_35592186的博客 1013

再谈向RichEdit中插入GIF动画的实现

我的前一篇文章“使用定时器显示GIF动画的ATL控件实现”中讲述了如何创建ATL项目,并实现显示GIF动画的控件,虽然能够显示,但有一些问题: 1. tphlj同学说一行插入多个GIF的时候,CPU会很高。     这个问题我倒没有注意,因为我发现了更严重的问题,所以用那种方法实现的控件没有使用了,已经被我删掉,不能测试。 2. 删除插入的GIF后发现光标还在不停的闪烁     显然这是由

haoekin的专栏 5292

实现富文本编辑器中的超链接功能

本文还有配套的精品资源,点击获取 简介:在IT行业中,富文本编辑器(RichEdit)常用于提供丰富的文本格式化编辑功能。本项目"richedit_Linkdemo_richedit_超链接_"专注于如何在RichEdit中添加、展示和响应超链接实现超链接功能涉及RTF格式的理解、编程接口的使用以及事件处理机制。重点技术包括RTF格式下超链接的表示、链接的插入和显示、用户...

weixin_29443363的博客 2945

MFC中RichEdit控件的深入应用与实战教程

RichEdit控件是Microsoft Windows操作系统中用于创建富文本编辑器的基础组件。它支持文本的多种格式化选项,包括字体、颜色、大小、样式,以及超链接和图像的嵌入。开发者可利用RichEdit控件打造功能丰富的文本编辑器,适用于笔记应用、文本处理软件甚至代码编辑器等场景。RichEdit控件能够处理多种字符格式,允许多段落编辑,并提供基本的文本操作功能,如剪切、复制、粘贴。它还支持OLE(对象链接和嵌入)技术,可以嵌入其他文档,如Excel表格或PowerPoint演示文稿。

weixin_29781865的博客 777
上一篇: 在ACTIVEX控件中实现菜单(转载)
下一篇: ACTIVEX控件永久化的一些经验
gxulg
博客等级 码龄23年 9粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值