richedit实现超链接
2013-05-15 14:28
274 查看
刚在做小飞鸽的文件传送,要在richeidt上提示:XXX向你发送了XX文件,是 否接收,是和否都要使用超链接,
贴个代码吧:
[cpp]
view plaincopyprint?
int nTotalLen = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.SetSel(nTotalLen, nTotalLen);
CString str;
str.Format(_T("%s 向你发送文件:%s 是否接受?\r\n "), m_szName, pFile->m_szName);
m_EidtRecod.ReplaceSel((LPCTSTR)str);
CHARFORMAT cf = {0};
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_UNDERLINE|CFM_UNDERLINETYPE|CFM_LINK
cf.dwEffects = CFE_LINK|CFE_UNDERLINE;
cf.crTextColor = RGB(255, 0, 0);
// 设置超链接
nTotalLen = m_EidtRecod.GetWindowTextLength();
str.Format(_T("(Yes)是"));
m_EidtRecod.ReplaceSel((LPCTSTR)str);
int iEndPos = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.SetSel(iEndPos-10, iEndPos);
m_EidtRecod.SetSelectionCharFormat(cf);
// 设置超链接
m_EidtRecod.SetSel(iEndPos, iEndPos);
m_EidtRecod.ReplaceSel(_T(" "));
nTotalLen = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.ReplaceSel(_T("(No)否"));
iEndPos = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.SetSel(iEndPos-10, iEndPos);
m_EidtRecod.SetSelectionCharFormat(cf);
m_EidtRecod.SetSel(iEndPos, iEndPos);
m_EidtRecod.ReplaceSel(_T("\r\n"));
// 使RichEdit响应ENM_LINK事件
m_EidtRecod.SetEventMask(ENM_LINK);
m_EidtRecod.LineScroll(1);
父类加个消息映射:
[cpp]
view plaincopyprint?
afx_msg void OnLink(LPNMHDR pnmh, LRESULT *pResult);
[cpp]
view plaincopyprint?
ON_NOTIFY(EN_LINK, IDC_RICHEDIT_RECODE, OnLink)
[cpp]
view plaincopyprint?
void XXX::OnLink(LPNMHDR pnmh, LRESULT *pResult) { ENLINK *pEnLink = (ENLINK *)pnmh; if(pEnLink->msg == WM_LBUTTONDOWN) { m_EidtRecod.SetSel(pEnLink->chrg); CString strLink = m_EidtRecod.GetSelText(); if (-1 != strLink.Find(_T("是"))) { } else if(-1 != strLink.Find(_T("否"))) { } } pResult = 0; }
也可以子类化richeidt,通过消息反射函数。
再贴个超链接通用的代码吧:
[cpp]
view plaincopyprint?
DWORD Mask = m_edit.GetEventMask(); Mask = Mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS; m_edit.SetEventMask(Mask); ::SendMessage(m_edit.m_hWnd, EM_AUTOURLDETECT, true, 0); m_edit.SetWindowText(_T("12222 www.baidu.com ooooie\r\nddfdf www.baidu.com kkkdkf"));
这样所有的www.什么的都变蓝色加下划线
再加个响应代码
[cpp]
view plaincopyprint?
ON_NOTIFY(EN_LINK, IDC_RICHEDIT21, OnLink)
[cpp]
view plaincopyprint?
void XXXDlg::OnLink(LPNMHDR pnmh, LRESULT *pResult)
{
ENLINK* pLink = ( ENLINK* )pnmh ;
*pResult = 0;
switch (pLink->msg)
{
case WM_LBUTTONDOWN://如果鼠标左键被点击
{
CString strURL;
CHARRANGE crCharRange;
CRichEditCtrl * pTempEdit = (CRichEditCtrl*)CRichEditCtrl::FromHandle(pLink->nmhdr.hwndFrom);
pTempEdit->GetSel(crCharRange); //得到原来选中的字符
pTempEdit->SetSel(pLink->chrg); //设置RUL被选中
strURL = pTempEdit->GetSelText(); //得到URL
pTempEdit->SetSel( crCharRange ); //恢复原来被选中的字符
CWaitCursor l_WaitCursor ; //用当前默认的浏览器打URL
ShellExecute(this->GetSafeHwnd(), _T("open"), strURL, NULL, NULL, SW_SHOWNORMAL);
*pResult = 1;
}
break ;
case WM_LBUTTONUP:
{
*pResult = 1;
}
break ;
default:
break ;
}
}
收工.
贴个代码吧:
[cpp]
view plaincopyprint?
int nTotalLen = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.SetSel(nTotalLen, nTotalLen);
CString str;
str.Format(_T("%s 向你发送文件:%s 是否接受?\r\n "), m_szName, pFile->m_szName);
m_EidtRecod.ReplaceSel((LPCTSTR)str);
CHARFORMAT cf = {0};
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask = CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_UNDERLINE|CFM_UNDERLINETYPE|CFM_LINK
cf.dwEffects = CFE_LINK|CFE_UNDERLINE;
cf.crTextColor = RGB(255, 0, 0);
// 设置超链接
nTotalLen = m_EidtRecod.GetWindowTextLength();
str.Format(_T("(Yes)是"));
m_EidtRecod.ReplaceSel((LPCTSTR)str);
int iEndPos = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.SetSel(iEndPos-10, iEndPos);
m_EidtRecod.SetSelectionCharFormat(cf);
// 设置超链接
m_EidtRecod.SetSel(iEndPos, iEndPos);
m_EidtRecod.ReplaceSel(_T(" "));
nTotalLen = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.ReplaceSel(_T("(No)否"));
iEndPos = m_EidtRecod.GetWindowTextLength();
m_EidtRecod.SetSel(iEndPos-10, iEndPos);
m_EidtRecod.SetSelectionCharFormat(cf);
m_EidtRecod.SetSel(iEndPos, iEndPos);
m_EidtRecod.ReplaceSel(_T("\r\n"));
// 使RichEdit响应ENM_LINK事件
m_EidtRecod.SetEventMask(ENM_LINK);
m_EidtRecod.LineScroll(1);
int nTotalLen = m_EidtRecod.GetWindowTextLength(); m_EidtRecod.SetSel(nTotalLen, nTotalLen); CString str; str.Format(_T("%s 向你发送文件:%s 是否接受?\r\n "), m_szName, pFile->m_szName); m_EidtRecod.ReplaceSel((LPCTSTR)str); CHARFORMAT cf = {0}; cf.cbSize = sizeof(CHARFORMAT); cf.dwMask = CFM_COLOR|CFM_FACE|CFM_SIZE|CFM_UNDERLINE|CFM_UNDERLINETYPE|CFM_LINK cf.dwEffects = CFE_LINK|CFE_UNDERLINE; cf.crTextColor = RGB(255, 0, 0); // 设置超链接 nTotalLen = m_EidtRecod.GetWindowTextLength(); str.Format(_T("(Yes)是")); m_EidtRecod.ReplaceSel((LPCTSTR)str); int iEndPos = m_EidtRecod.GetWindowTextLength(); m_EidtRecod.SetSel(iEndPos-10, iEndPos); m_EidtRecod.SetSelectionCharFormat(cf); // 设置超链接 m_EidtRecod.SetSel(iEndPos, iEndPos); m_EidtRecod.ReplaceSel(_T(" ")); nTotalLen = m_EidtRecod.GetWindowTextLength(); m_EidtRecod.ReplaceSel(_T("(No)否")); iEndPos = m_EidtRecod.GetWindowTextLength(); m_EidtRecod.SetSel(iEndPos-10, iEndPos); m_EidtRecod.SetSelectionCharFormat(cf); m_EidtRecod.SetSel(iEndPos, iEndPos); m_EidtRecod.ReplaceSel(_T("\r\n")); // 使RichEdit响应ENM_LINK事件 m_EidtRecod.SetEventMask(ENM_LINK); m_EidtRecod.LineScroll(1);
父类加个消息映射:
[cpp]
view plaincopyprint?
afx_msg void OnLink(LPNMHDR pnmh, LRESULT *pResult);
afx_msg void OnLink(LPNMHDR pnmh, LRESULT *pResult);
[cpp]
view plaincopyprint?
ON_NOTIFY(EN_LINK, IDC_RICHEDIT_RECODE, OnLink)
ON_NOTIFY(EN_LINK, IDC_RICHEDIT_RECODE, OnLink)
[cpp]
view plaincopyprint?
void XXX::OnLink(LPNMHDR pnmh, LRESULT *pResult) { ENLINK *pEnLink = (ENLINK *)pnmh; if(pEnLink->msg == WM_LBUTTONDOWN) { m_EidtRecod.SetSel(pEnLink->chrg); CString strLink = m_EidtRecod.GetSelText(); if (-1 != strLink.Find(_T("是"))) { } else if(-1 != strLink.Find(_T("否"))) { } } pResult = 0; }
void XXX::OnLink(LPNMHDR pnmh, LRESULT *pResult) { ENLINK *pEnLink = (ENLINK *)pnmh; if(pEnLink->msg == WM_LBUTTONDOWN) { m_EidtRecod.SetSel(pEnLink->chrg); CString strLink = m_EidtRecod.GetSelText(); if (-1 != strLink.Find(_T("是"))) { } else if(-1 != strLink.Find(_T("否"))) { } } pResult = 0; }
也可以子类化richeidt,通过消息反射函数。
再贴个超链接通用的代码吧:
[cpp]
view plaincopyprint?
DWORD Mask = m_edit.GetEventMask(); Mask = Mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS; m_edit.SetEventMask(Mask); ::SendMessage(m_edit.m_hWnd, EM_AUTOURLDETECT, true, 0); m_edit.SetWindowText(_T("12222 www.baidu.com ooooie\r\nddfdf www.baidu.com kkkdkf"));
DWORD Mask = m_edit.GetEventMask(); Mask = Mask | ENM_LINK | ENM_MOUSEEVENTS | ENM_SCROLLEVENTS | ENM_KEYEVENTS; m_edit.SetEventMask(Mask); ::SendMessage(m_edit.m_hWnd, EM_AUTOURLDETECT, true, 0); m_edit.SetWindowText(_T("12222 www.baidu.com ooooie\r\nddfdf www.baidu.com kkkdkf"));
这样所有的www.什么的都变蓝色加下划线
再加个响应代码
[cpp]
view plaincopyprint?
ON_NOTIFY(EN_LINK, IDC_RICHEDIT21, OnLink)
ON_NOTIFY(EN_LINK, IDC_RICHEDIT21, OnLink)
[cpp]
view plaincopyprint?
void XXXDlg::OnLink(LPNMHDR pnmh, LRESULT *pResult)
{
ENLINK* pLink = ( ENLINK* )pnmh ;
*pResult = 0;
switch (pLink->msg)
{
case WM_LBUTTONDOWN://如果鼠标左键被点击
{
CString strURL;
CHARRANGE crCharRange;
CRichEditCtrl * pTempEdit = (CRichEditCtrl*)CRichEditCtrl::FromHandle(pLink->nmhdr.hwndFrom);
pTempEdit->GetSel(crCharRange); //得到原来选中的字符
pTempEdit->SetSel(pLink->chrg); //设置RUL被选中
strURL = pTempEdit->GetSelText(); //得到URL
pTempEdit->SetSel( crCharRange ); //恢复原来被选中的字符
CWaitCursor l_WaitCursor ; //用当前默认的浏览器打URL
ShellExecute(this->GetSafeHwnd(), _T("open"), strURL, NULL, NULL, SW_SHOWNORMAL);
*pResult = 1;
}
break ;
case WM_LBUTTONUP:
{
*pResult = 1;
}
break ;
default:
break ;
}
}
void XXXDlg::OnLink(LPNMHDR pnmh, LRESULT *pResult) { ENLINK* pLink = ( ENLINK* )pnmh ; *pResult = 0; switch (pLink->msg) { case WM_LBUTTONDOWN://如果鼠标左键被点击 { CString strURL; CHARRANGE crCharRange; CRichEditCtrl * pTempEdit = (CRichEditCtrl*)CRichEditCtrl::FromHandle(pLink->nmhdr.hwndFrom); pTempEdit->GetSel(crCharRange); //得到原来选中的字符 pTempEdit->SetSel(pLink->chrg); //设置RUL被选中 strURL = pTempEdit->GetSelText(); //得到URL pTempEdit->SetSel( crCharRange ); //恢复原来被选中的字符 CWaitCursor l_WaitCursor ; //用当前默认的浏览器打URL ShellExecute(this->GetSafeHwnd(), _T("open"), strURL, NULL, NULL, SW_SHOWNORMAL); *pResult = 1; } break ; case WM_LBUTTONUP: { *pResult = 1; } break ; default: break ; } }
收工.
相关文章推荐
- RichEdit中支持超链接的实现
- Richedit实现超链接
- richedit实现超链接
- 在RichEdit中实现超链接
- 43.VC(custom)-richedit实现超链接(随手代码)
- RichEdit选中文字右键菜单的实现
- 通过ATL COM组件实现在RichEdit中各种图片的显示(包括Gif图片的显示)
- 在RichEdit中使用超链接
- MFC应用---超链接RichEdit
- 实现一种快速查找Richedit中可见区域内OLE对象的方法
- 在 wxWidgets 中使用 RichEdit 及超链接自动识别
- Delphi RichEdit的实现MSN / QQ 中的动画表情
- RichEdit选中文字右键菜单的实现
- 一种快速刷新richedit中内嵌动画的方法的实现
- Delphi RichEdit的实现MSN / QQ 中的动画表情
- win32sdk学习 richedit实现的一个简单记事本
- 一种快速刷新richedit中内嵌动画的方法的实现
- C++ budilder 使用ImageOle.dll 实现richedit显示任意格式图片和连接 gif
- RichEditDemo v1.0版发布,仿QQ聊天对话框界面实现
- 再谈向RichEdit中插入GIF动画的实现