您的位置:首页 > 其它

MFC应用---超链接RichEdit

2013-08-15 20:43 399 查看




1.简单介绍

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

大致如同这样的效果



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


2.具体实现

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

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

[cpp] view
plaincopyprint?

CRichEditCtrlm_edit;

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

[cpp] view
plaincopyprint?

GetClientRect(&rcClient);

if(!m_edit.Create(WS_VISIBLE|WS_CHILD|ES_MULTILINE,rcClient,this,IDC_EDIT_SHOW))

{

returnFALSE;

}

m_edit.SetFont(m_listJust4Font.GetFont());

DWORD mask =::SendMessage(m_edit.m_hWnd,EM_GETEVENTMASK, 0, 0);

mask = mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS |ENM_KEYEVENTS;

::SendMessage(m_edit.m_hWnd,EM_SETEVENTMASK, 0, mask);

::SendMessage(m_edit.m_hWnd,EM_AUTOURLDETECT, true, 0);

//上诉代码放在对话框的OnInitDialog函数中。

3.编写超链接响应函数

[cpp] view
plaincopyprint?

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

ON_NOTIFY(EN_LINK,IDC_EDIT_SHOW, OnRichEditLink)

void CHyperlinkEditDlg::OnRichEditLink(NMHDR*in_pNotifyHeader, LRESULT* out_pResult )

{

ENLINK* l_pENLink =(ENLINK*)in_pNotifyHeader ;

*out_pResult = 0 ;

switch(l_pENLink->msg)

{

caseWM_LBUTTONDOWN:

{

CString strURL ;

CHARRANGE crCharRange ;

CRichEditCtrl * pTempEdit;

pTempEdit =(CRichEditCtrl*)CRichEditCtrl::FromHandle(l_pENLink->nmhdr.hwndFrom);

pTempEdit->GetSel(crCharRange );

pTempEdit->SetSel(l_pENLink->chrg);

strURL = pTempEdit->GetSelText();

pTempEdit->SetSel(crCharRange);

CWaitCursor l_WaitCursor ;

ShellExecute( this->GetSafeHwnd(), _T( "open"),strURL, NULL, NULL, SW_SHOWNORMAL ) ;

*out_pResult = 1 ;

}

break ;

caseWM_LBUTTONUP:

{

*out_pResult = 1 ;

}

break ;

}

}


3.代码解释

先讲一下上面几个属性

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

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

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

//

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

[cpp] view
plaincopyprint?

typedef struct _enlink

{

NMHDR nmhdr;

UINT msg;

WPARAM wParam;

LPARAM lParam;

CHARRANGE chrg;

} ENLINK;

//nmhdr 制定是哪传来的消息通知,其中包含了消息来源窗口的hwnd

//chrg 在richedit中有链接效果的文字的区域

上面的代码的思路,主要是通过设置超链接文字为选中,在获得选中文字,然后将跳转这段url。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: