在记事本中创建超链接(文本编辑)[MFC]

在记事本中创建超链接(文本编辑)[MFC],mfc,Mfc,我正在用MFC构建一个文本编辑应用程序。有没有一种方法可以在用户写入网址时自动创建超链接?这就像当你写一个网址“www.google.com”时,应用程序会检测网址并立即创建一个超链接。我搜索了解释这一点的文档,但没有找到。。 但我没能做到。。 我已经制作了记事本,但我无法在记事本上添加超链接功能 以下句子是超链接的功能 单击文本需要在文本指定的位置打开浏览器窗口 光标在控件上移动时,需要从标准箭头光标更改为指向食指 当光标移动到控件上时,控件中的文本需要加下划线 超链接控件需要以不同颜色显示文

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

以下句子是超链接的功能

  • 单击文本需要在文本指定的位置打开浏览器窗口

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

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

  • 超链接控件需要以不同颜色显示文本,但黑色不行。 我添加的功能包括:

  • 5.超链接控件一旦被访问,就需要更改颜色

    6.超链接控件应可通过键盘访问

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

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


    请回答并帮助我。谢谢。

    只需使用一个控件(记住调用您的
    InitInstance
    )。呼叫完成。

    不幸的是,这还不足以让它工作。它会将类似URL的文本显示为蓝色下划线,但不会调用链接

    这必须由附加代码来处理。这将设置所需的事件掩码:

    long lMask = m_RichEditCtrl.GetEventMask();
    m_RichEditCtrl.SetEventMask(lMask | ENM_LINK);
    
    m_RichEditCtrl.SetAutoURLDetect();
    
    此外,还必须处理反映的EN_链接以遵循链接。例如:

    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;
    }
    
    void CHyperLinkInEditView::OnEnLink(NMHDR*pNMHDR,LRESULT*pResult)
    {
    ENLINK*p_Link=重新解释铸件(pNMHDR);
    如果(p_-Link&&p_-Link->msg==WM_-LBUTTONDOWN)
    {
    //int iRange=m_RichEditCtrl.getextrange(p_enLinkInfo->chrg.cpMin,p_enLinkInfo->chrg.cpMax);
    m_RichEditCtrl.setel(p_Link->chrg);
    CString szLinkString=m_RichEditCtrl.GetSelText();
    ShellExecute(m_hWnd,L“Open”,szLinkString,NULL,NULL,SW_最大化);
    }
    *预设值=0;
    }
    
    以上所有内容将解决要求1、2、3(部分-文本始终带下划线)和4。 我不太明白5、6和7

    你能详细说明一下吗