我正在使用MFC构建textEdit应用程序。有没有办法在用户写网址时自动创建超链接?就像当您编写网址“www.google.com”时,应用程序会检测网址并立即创建超链接。我搜索了解释这个问题的文件,却找不到它。 我无法做到.. 我已经制作了记事本,但我无法在记事本上添加超链接的功能。
以下句子是超链接的功能。
单击文本需要打开浏览器窗口到文本指定的位置。
当光标在控件上移动时,光标需要从标准箭头光标更改为指向食指。
当光标移过控件时,控件中的文本需要加下划线。
超链接控件需要以不同的颜色显示文本 - 黑色只是不会这样做。 我添加的功能是:
5.访问过的超链接控件需要更改颜色。
6.应该可以从键盘访问超链接控件。
7.应该安装某种钩子,以便程序员在控件具有焦点或光标悬停在控件上时执行某些操作。
在这些功能中,我最想要完成的是第一个。 如果我单击超链接文本,它应该链接到Internet上的浏览器窗口。
请回答并帮助我。感谢。
答案 0 :(得分:1)
只需使用CRichEditCtrl控件(记得在InitInstance
中拨打AfxInitRichEdit2)。致电SetAutoURLDetect。完成。
答案 1 :(得分:0)
不幸的是,这还不足以让它发挥作用。它将显示类似URL的文本为蓝色下划线但不会调用链接。
这必须由其他代码处理。这将设置所需的事件掩码:
long lMask = m_RichEditCtrl.GetEventMask();
m_RichEditCtrl.SetEventMask(lMask | ENM_LINK);
m_RichEditCtrl.SetAutoURLDetect();
还必须处理EN_LINK,以便按照链接进行处理。例如:
void CHyperLinkInEditView::OnEnLink(NMHDR *pNMHDR, LRESULT *pResult)
{
ENLINK *p_Link = reinterpret_cast<ENLINK *>(pNMHDR);
if(p_Link && p_Link->msg == WM_LBUTTONDOWN)
{
//int iRange = m_RichEditCtrl.GetTextRange(p_enLinkInfo->chrg.cpMin, p_enLinkInfo->chrg.cpMax);
m_RichEditCtrl.SetSel(p_Link->chrg);
CString szLinkString = m_RichEditCtrl.GetSelText ();
ShellExecute(m_hWnd, L"Open", szLinkString, NULL, NULL, SW_MAXIMIZE);
}
*pResult = 0;
}
以上所有内容将解决要求1,2,3(部分文本总是加下划线)和4。 我不太了解5,6和7。
你能详细说明一下吗?