zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    python字典类型
    python集合类型
    python元组类型
    python列表类型
    Python中的序列操作
    python字符串格式化输出
    python可变对象和不可变对象的解释
    Python数值类型
    Python循环结构用法
    python if条件判断语句
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13318834.html
Copyright © 2011-2022 走看看