43.VC(custom)-richedit实现超链接(随手代码)
来源:互联网 发布:护眼仪哪个牌子好 知乎 编辑:程序博客网 时间:2024/05/21 06:02
刚在做小飞鸽的文件传送,要在richeidt上提示:XXX向你发送了XX文件,是 否接收,是和否都要使用超链接,
贴个代码吧:
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_LINKcf.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);
父类加个消息映射:
afx_msg void OnLink(LPNMHDR pnmh, LRESULT *pResult);
ON_NOTIFY(EN_LINK, IDC_RICHEDIT_RECODE, OnLink)
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,通过消息反射函数。
再贴个超链接通用的代码吧:
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.什么的都变蓝色加下划线
再加个响应代码
ON_NOTIFY(EN_LINK, IDC_RICHEDIT21, OnLink)
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();//得到URLpTempEdit->SetSel( crCharRange );//恢复原来被选中的字符CWaitCursor l_WaitCursor ;//用当前默认的浏览器打URLShellExecute(this->GetSafeHwnd(), _T("open"), strURL, NULL, NULL, SW_SHOWNORMAL);*pResult = 1;}break ;case WM_LBUTTONUP:{*pResult = 1;}break ;default:break ;}}
收工.
- 43.VC(custom)-richedit实现超链接(随手代码)
- richedit实现超链接
- Richedit实现超链接
- 38.VC(custom)-调用临时Fonts(随手代码)
- 44.VC(custom)-EDIT密码框切换(随手代码)
- 在RichEdit中实现超链接
- 28.VC(custom)-控制一个程序只能有一个进程(单例随手代码)
- RichEdit超链接
- RichEdit中支持超链接的实现
- RichEdit中加超链接
- MFC应用---超链接RichEdit
- MFC应用---超链接RichEdit
- 17.VC(ui)-托盘图标和弹出菜单的实现(随手代码)
- 在RichEdit中使用超链接
- MFC实现位图超链接代码
- VC++ 中巧妙实现超链接控制
- 19.VC(ui)-加载图片资源的方法(随手代码)
- VC 超链接
- Elapsed time is 4728.717948 seconds.
- ubuntu下构架tftp服务器
- c++ template之trait技法总结
- UIKit和CoCos2d 两种情况下 Retina模式图片的命名方法区别
- Nutch爬虫工作流程及文件格式详细分析
- 43.VC(custom)-richedit实现超链接(随手代码)
- 指针(二)
- 【VC编译问题】如何解决VC中的警告Warning C4251
- GDI+入门01
- 堆栈调用解析多线程
- wsdl
- LoadError (no such file to load — openssl)
- linux设备驱动--非阻塞IO与select,poll调用 (续1)
- Objective-c - nil, Nil, NULL和NSNull