0

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

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

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

  2. 光标在控件上移动时需要从标准箭头光标变为指向的食指。

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

  4. 超链接控件需要以不同的颜色显示文本——黑色是不行的。我添加的功能是:

5.超链接控件一旦访问需要改变颜色。

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

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

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

请回答并帮助我。谢谢。

4

2 回答 2

1

只需使用CRichEditCtrl控件(请记住在您的中调用AfxInitRichEdit2InitInstance)。调用SetAutoURLDetect。完毕。

于 2012-10-21T19:24:38.803 回答
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。

你能详细说明一下吗?

于 2012-10-23T21:56:48.013 回答