在windows程序中使用Rich Edit取代Edit

1、在程序启动的时候,加载Rich Edit对应的dll

    HINSTANCE hRich;
    hRich = LoadLibrary(TEXT("RICHED20.dll"));

2、使用Rich Edit的c++文件需要包含头文件

#include 

3、创建Rich Edit的时候跟创建普通编辑框几乎是一样的,除了class_name要改为RICHEDIT_CLASS

4、Rich Edit的一大特色是可以自动识别http的超链接。不过这个功能是默认关闭的,要手动打开

SendMessage(rich_edit_, EM_AUTOURLDETECT, TRUE, 0);

这个打开以后,URL是可以识别出来的。但是点击URL,还不能打开页面。还需要做进一步的代码完善。首先要允许Rich Edit发送EN_LINK消息

    DWORD dwMask = ENM_LINK;
    SendMessage(rich_edit_, EM_SETEVENTMASK, 0L, (LPARAM)dwMask);

然后在主窗体的消息循环中处理这个消息

    case WM_NOTIFY:
    {
        NMHDR *p = (NMHDR *)lp;

        if (p->code == EN_LINK)
        {
            ENLINK *pLink = (ENLINK *)lp;
            if (pLink->msg == WM_LBUTTONDOWN)
            {
                wchar_t urlBuf[512];
                SendMessage(rich_edit_, EM_EXSETSEL, 0, (LPARAM)&(pLink->chrg));
                SendMessage(rich_edit_, EM_GETSELTEXT, 0, (LPARAM)urlBuf);
                ::ShellExecute(NULL, TEXT("open"), urlBuf, NULL, NULL, SW_SHOWNORMAL);
            }
        }
    }

参考:
MSDN上面对Rich Edit的详细介绍
https://docs.microsoft.com/zh-cn/windows/desktop/Controls/about-rich-edit-controls

如何在Rich Edit Control中管理超链接
https://blog.csdn.net/Zhymax/article/details/2280091

你可能感兴趣的:(在windows程序中使用Rich Edit取代Edit)