MFC应用---超链接RichEdit


1.简单介绍

CrichEditCtrl,MFC的该控件功能还是比较优秀的。其中一条就是能够自动识别文本内容的超链接,并能够显示单击后实现跳转。

大致如同这样的效果

 

具体可以去 这边下载 例子代码

2.具体实现

1.控件CRichEditCtrl ,使用该类型的编辑控件;

在对话框中设置成员变量:

  1. CRichEditCtrlm_edit;  

2.创建CrichEditCtrl控件,并设置它的消息属性;

  1. GetClientRect(&rcClient);  
  2.     if(!m_edit.Create(WS_VISIBLE|WS_CHILD|ES_MULTILINE,rcClient,this,IDC_EDIT_SHOW))  
  3.     {  
  4.         returnFALSE;  
  5.     }  
  6.     m_edit.SetFont(m_listJust4Font.GetFont());  
  7.     DWORD mask =::SendMessage(m_edit.m_hWnd,EM_GETEVENTMASK, 0, 0);  
  8.     mask = mask | ENM_LINK  | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS |ENM_KEYEVENTS;  
  9.     ::SendMessage(m_edit.m_hWnd,EM_SETEVENTMASK, 0, mask);  
  10.     ::SendMessage(m_edit.m_hWnd,EM_AUTOURLDETECT, true, 0);  
  11. //上诉代码放在对话框的OnInitDialog函数中。  

3.编写超链接响应函数

  1. afx_msg void OnRichEditLink(NMHDR* in_pNotifyHeader, LRESULT*out_pResult );  
  2. ON_NOTIFY(EN_LINK,IDC_EDIT_SHOW, OnRichEditLink)  
  3.    
  4. void CHyperlinkEditDlg::OnRichEditLink(NMHDR*in_pNotifyHeader, LRESULT* out_pResult )  
  5. {  
  6.     ENLINK* l_pENLink =(ENLINK*)in_pNotifyHeader ;  
  7.     *out_pResult = 0 ;  
  8.     switch(l_pENLink->msg)  
  9.     {  
  10.     caseWM_LBUTTONDOWN:  
  11.         {  
  12.             CString strURL ;  
  13.             CHARRANGE crCharRange ;  
  14.             CRichEditCtrl * pTempEdit;  
  15.             pTempEdit =(CRichEditCtrl*)CRichEditCtrl::FromHandle(l_pENLink->nmhdr.hwndFrom);  
  16.             pTempEdit->GetSel(crCharRange );  
  17.             pTempEdit->SetSel(l_pENLink->chrg);  
  18.    
  19.             strURL = pTempEdit->GetSelText();  
  20.             pTempEdit->SetSel(crCharRange);  
  21.             CWaitCursor l_WaitCursor ;  
  22.             ShellExecute( this->GetSafeHwnd(), _T( "open"),strURL, NULL, NULL, SW_SHOWNORMAL ) ;  
  23.             *out_pResult = 1 ;  
  24.         }  
  25.         break ;  
  26.     caseWM_LBUTTONUP:  
  27.         {  
  28.             *out_pResult = 1 ;  
  29.         }  
  30.         break ;  
  31.     }  
  32. }  
  33.    

3.代码解释

先讲一下上面几个属性

EM_GETEVENTMASK : 主要是获得CRichEditCtrl会传给它的父窗口那些通知;

EM_SETEVENTMASK : 主要是设置CRichEditCtrl会传给它的父窗口那些通知;

EM_AUTOURLDETECT : 主要是设置CRichEditCtrl是否自动检测超链接;

//

在消息响应函数中OnRichEditLink,其中结构体ENLINK

  1. typedef struct _enlink  
  2. {  
  3.     NMHDR nmhdr;  
  4.     UINT msg;  
  5.     WPARAM wParam;  
  6.     LPARAM lParam;  
  7.     CHARRANGE chrg;  
  8. } ENLINK;  
  9. //nmhdr 制定是哪传来的消息通知,其中包含了消息来源窗口的hwnd  
  10. //chrg  在richedit中有链接效果的文字的区域  

上面的代码的思路,主要是通过设置超链接文字为选中,在获得选中文字,然后将跳转这段url。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值