在现代的应用程序中,超链接是用户界面中不可或缺的一部分。它允许用户通过点击文本来访问互联网上的资源。本文将介绍一个基于MFC的超链接编辑控件,它不仅允许用户编辑文本,还可以独立地编辑URL,或者将文本和URL设置为始终相同。此外,它还提供了一个对话框,类似于一些HTML编辑器中找到的,以帮助用户编辑URL。
这个控件可以设置为只有在显式设置URL时才作为链接,或者如果文本看起来像URL。另外,它可以设置为始终是链接,或者从不作为链接。用户可以通过上下文菜单项调出编辑URL的对话框。控件还响应Ctrl+K快捷键,该快捷键可以在代码中更改为任何键组合。
要使用这个控件,只需创建一个编辑控件,并将其附加到一个类型为CHyperEdit的成员变量。
这个控件相当简单,通过查看源代码可以很容易地了解其工作原理。以下是公共函数的列表:
以下是控件的一些关键函数及其说明:
CHyperEdit(); 标准的空构造函数。
void SetLinkOption(HE_OPTION_LINK optLink); 设置何时显示文本为链接。有关选项的详细信息,请参见枚举HE_OPTION_LINK。
HE_OPTION_LINK GetLinkOption() const; 返回当前链接选项,如上函数中设置。
void SetUnderlineOption(HE_OPTION_UNDERLINE optUnderline); 设置何时显示文本下划线。有关选项的详细信息,请参见枚举HE_OPTION_UNDERLINE。
HE_OPTION_UNDERLINE GetUnderlineOption() const; 返回当前下划线选项,如上函数中设置。
void SetVisited(BOOL bVisited = TRUE); 设置链接是否显示为已访问链接。
BOOL GetVisited() const; 返回链接是否已被访问。
void SetLinkCursor(HCURSOR hCursor = NULL); 设置鼠标悬停在链接上时显示的光标。指定NULL将导致控件显示其默认的“手形”光标。
HCURSOR GetLinkCursor() const; 返回当前链接光标。
void SetColours(COLORREF crLink, COLORREF crVisited, COLORREF crHover = -1); 设置链接颜色。crLink指定链接的颜色,crVisited指定已访问链接的颜色,crHover指定用户移动鼠标时的链接颜色。如果crHover指定为-1,则用户移动鼠标时链接颜色不变。
void GetColours(COLORREF* pcrLink, COLORREF* pcrVisited = NULL, COLORREF* pcrHover = NULL) const; 检索当前链接颜色。如果不想检索某个参数的值,可以指定NULL。
void SetIEColours(); 将链接颜色设置为用户在Internet Explorer中选择的颜色。如果用户不使用Internet Explorer,或者颜色未设置,则默认为链接为蓝色,已访问链接为紫色,悬停时无变化。调用GetColours后此函数将返回实际设置的值。
void SetDblClkToJump(BOOL bDblClkToJump = TRUE); 设置是否仅在双击链接时跳转到URL。如果bDblClkToJump为FALSE,则单击将跳转到URL(默认情况)。
BOOL GetDblClkToJump() const; 返回是否需要双击才能跳转到URL。
void SetCtrlClkToJump(BOOL bCtrlClkToJump = TRUE); 设置是否仅在Ctrl+单击链接时跳转到URL。如果bCtrlClkToJump为FALSE,则单击将跳转到URL(默认情况),除非SetDblClkToJump已设置。
BOOL GetCtrlClkToJump() const; 返回是否需要Ctrl+单击才能跳转到URL。
void SetURL(LPCTSTR lpszURL = NULL); 将当前URL设置为传入的字符串。如果lpszURL为NULL,则清除URL。
CString GetURL() const; 返回当前设置的URL。
void EditURL(); 调用一个对话框,允许用户编辑URL。类似于一些HTML编辑器的工作方式,提供了URL前缀的帮助。
void SetURLIsText(BOOL bURLIsText = TRUE); 如果bURLIsText为TRUE,则URL和显示的文本将始终相同。编辑URL将更改窗口文本,反之亦然。当首次调用此函数并将bURLIsText设置为TRUE时,如果URL和文本不同,则两者都将设置为下一个更改的值。
BOOL GetURLIsText() const; 返回URL和文本是否始终相同。
void SetEditURLAccelerator(BYTE fVirt = 0, WORD key = 0); 允许设置编辑超链接的快捷键。默认键组合为Ctrl+K。fVirt和key参数与ACCEL结构的成员相同。如果fVirt为0,则不设置快捷键。
void GetEditURLAccelerator(BYTE& fVirt, WORD& key); 返回当前用于编辑超链接的快捷键。
virtual BOOL IsTextHyperText(); 确定当前编辑文本是否被视为超链接。如果文本是超链接,则返回TRUE,否则返回FALSE。仅在链接选项设置为HEOL_AUTO或HEOL_HASURL时调用。覆盖此函数以使用不同的规则来确定有效的URL。
以下是控件使用的枚举类型:
typedef enum {
HEOL_NEVER,
HEOL_ALWAYS,
HEOL_AUTO,
HEOL_HASURL
} HE_OPTION_LINK;
HE_OPTION_LINK枚举定义了何时将文本显示为链接。
typedef enum {
HEOU_NEVER,
HEOU_ALWAYS,
HEOU_HOVER
} HE_OPTION_UNDERLINE;
HE_OPTION_UNDERLINE枚举定义了何时显示文本下划线。