在记事本中创建HyperLink(textEdit)[MFC]

时间:2012-10-21 15:38:35

标签: mfc

我正在使用MFC构建textEdit应用程序。有没有办法在用户写网址时自动创建超链接?就像当您编写网址“www.google.com”时,应用程序会检测网址并立即创建超链接。我搜索了解释这个问题的文件,却找不到它。 我无法做到.. 我已经制作了记事本,但我无法在记事本上添加超链接的功能。

以下句子是超链接的功能。

  1. 单击文本需要打开浏览器窗口到文本指定的位置。

  2. 当光标在控件上移动时,光标需要从标准箭头光标更改为指向食指。

  3. 当光标移过控件时,控件中的文本需要加下划线。

  4. 超链接控件需要以不同的颜色显示文本 - 黑色只是不会这样做。 我添加的功能是:

  5. 5.访问过的超链接控件需要更改颜色。

    6.应该可以从键盘访问超链接控件。

    7.应该安装某种钩子,以便程序员在控件具有焦点或光标悬停在控件上时执行某些操作。

    在这些功能中,我最想要完成的是第一个。 如果我单击超链接文本,它应该链接到Internet上的浏览器窗口。

    请回答并帮助我。感谢。

2 个答案:

答案 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。

你能详细说明一下吗?