65.9K
CodeProject 正在变化。 阅读更多。
Home

多行超文本编辑控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.89/5 (31投票s)

2004年9月1日

CPOL

2分钟阅读

viewsIcon

142147

downloadIcon

4045

一个从 CEdit 派生的多行超链接编辑控件。

Sample Image - hyperedit.png

引言

CHyperEdit 的灵感来源于以下帖子

CHyperEdit 是标准 MFC CEdit 控件的直接替代品,无需额外的初始化或函数调用即可完全正常运行。但是,可以微调构成可超链接标记的确切内容,并且可以通过重写虚拟函数 IsWordHyper 在派生的 CHyperEdit 类中轻松实现;点击这里查看示例。

特点

  • 可自定义的超链接和悬停颜色。
  • 多个超链接可以与普通文本自由混合。
  • 可扩展的超链接标记器。

API

public

  • COLORREF GetNormalColor()
  • COLORREF GetHoverColor()
  • void SetLinkColors(COLORREF clrNormal, COLORREF clrHover)
  • CString IsHyperlink(CPoint& pt)

受保护的

  • virtual BOOL IsWordHyper(const CString& csToken)

用法

基本用法

使用 CHyperEdit 再简单不过了,只需向对话框添加一个普通的 EDIT 控件。右键单击您刚添加的 EDIT 控件并选择Classwizard。单击成员变量选项卡。双击您刚添加的 EDIT 控件的控件 ID。输入一个成员变量名称,然后在类别下拉列表中选择控件而不是。在变量类型下拉列表下,您现在应该看到 CHyperEdit

注意:您可能需要删除您的 *.clw 文件并重新构建它,CHyperEdit 才能可用.

如果 CHyperEdit 类不可用,您可以只选择 CEdit 并将任何 CEdit 实例替换为 CHyperEdit。您可能还必须在编译之前手动添加所需的 #include 指令。

高级用法

为了更好地控制 CHyperEdit,您可以选择覆盖超链接标记器的默认功能,并更好地指定构成可超链接 URL 的确切内容。例如,以下代码片段通过仅超链接域名中包含 www 的标记来扩展默认行为。如果我们希望忽略 IP 地址,这将非常有用。

// Derived class overrides this function to extend hyperlinking
BOOL CMyHyperEdit::IsWordHyper(const CString& csToken) const
{
    if(IsWhiteSpace(csToken, 0)) return FALSE;
    CString csTemp(csToken); // Make a temp copy so we can convert it's case
    csTemp.MakeLower();

         // Ignore IP addresses
    if(csTemp.Left(7) == "http://www") return TRUE;

    return FALSE; // Not a valid token by default
}

注意:您也可以使用现成的正则表达式库,如 regex++,对 URL 或电子邮件地址进行更复杂的语法检查。

IsHyperlink 是一个公开可用的函数,其目的可能并不立即显现;说实话,我只是现在才意识到它可能有用。 :)

此函数返回鼠标当前悬停的整个超链接标记(如果有)。如果调用此函数时鼠标未悬停在任何超链接标记上,则它将返回 CString::Empty() 的结果。

发挥一点想象力,会出现一些有趣的可能性。例如,您可以在应用程序中使用 WM_TIMER 并检查 IsHyperlink 的返回值;如果它返回一个网站的有效 URL,您可以下载 HTML 页面并提取 TITLE 并将其显示在工具提示中。

© . All rights reserved.