Hyperlink超链接控件CHyperLink类

本文介绍了一个简单的MFCHyperLink按钮类,该类能够将任何静态控件转换为超链接控件。支持多种下划线模式、自定义颜色及光标、自动调整大小等功能。此外还介绍了如何设置及获取链接的URL、颜色等属性。

翻译来源:https://www.codeproject.com/Articles/34/Hyperlink-control

另外一个关于按钮超链接的类:一个简单的MFC HyperLink按钮类,支持任何大小的32bpp图标

一个静态的超链接控制

Small C++ class to transform any static control into a hyperlink control

一个常用的超链接控件。

作者:Chris Maunder

  • 下载演示项目 - 21 Kb
  • 下载源 - 7 Kb

    CHyperLink示例图像 

    这是一个简单的超链接控件,可以插入到任何对话框中。已经有这样的一些例子(PJ Naughter,和来自MSJ的Paul DiLascia的一些例子),但没有一个具有我想要的所有功能。GotoURL在8月9日的WDJ中使用了Stuart Patterson 功能。它比一个简单的更健壮ShellExecute,我已经修改了一点更多的Unicode友好。

    超链接最初是蓝色的,但是当光标在其上方,并且在用户点击它之后会改变颜色。当鼠标指针在链接上方时出现的光标CHyperLink::SetLinkCursor可以使用链接颜色和下划线轻松设置默认光标是一个小指针(来自winhlp32.exe文件的光标#106 - 感谢MSJ的Paul DiLascia)。还有一个用于分配控件的底层URL的链接的工具提示。

    链接有三个下划线模式,使用CHyperLink::SetUnderline以下设置

    • CHyperLink::ulHover - 当光标超过链接时出现下划线
    • CHyperLink::ulNone - 没有下划线
    • CHyperLinkulAlways - 链接总是下划线

    要使用超链接控件,只需创建静态控件(例如IDC_HYPERLINK)并将其附加到类型的成员变量CHyperLink链接的URL被视为静态控件的标题,除非另有说明。如果没有指定控件的标题,则将其设置为URL。如果不存在,则会发生调试断言。

    控件可以自动调整大小以适应标题大小(以保留真正的超链接外观和感觉)。调整大小将兑现

    SS_CENTERIMAGE,
    SS_LEFT
    SS_RIGHTSS_CENTER旗帜。

    控制非常简单。按钮按钮和颜色通知由控件处理,并根据链接的状态选择适当的字体和颜色。唯一棘手的是处理按钮点击。为了做到这一点,静态控件必须SS_NOTIFY设置位,并且ON_CONTROL_REFLECT安装STN_CLICKED消息处理程序

    要实际跟随该链接,ShellExecute将被调用来打开该URL,但是如果此操作失败,则会检查注册表以便找到.htm文件的可能候选者。如果找到它,那么它是启动的,希望它可以处理提供的URL字符串。无论如何,出现故障时会显示错误信息。

    CHyperLink的操作

    void SetURL(CString strURL);      // Get and set the target URL for the link
    CString GetURL();                 
    
    // Set (and get) the Link (unvisited and unvisited) colours      
    void SetColours(COLORREF crLinkColour, COLORREF crVisitedColour
                    COLORREF crHoverColour = -1);                      
    COLORREF GetLinkColour();      
    COLORREF GetVisitedColour();      
    COLORREF GetHoverColour();      
    
    // Set (and get) whether or not the link has been visited      
    void SetVisited(BOOL bVisited = TRUE);      
    BOOL GetVisited();      
    
    void SetLinkCursor(HCURSOR hCursor);      // Set the cursor for the link      
    
    // Set (and get) whether or not ot underline the link)      
    void SetUnderline(int nUnderline = CHyperLink::ulHover);      
    int GetUnderline();
    
    // Set (and get) whether to autosize the control to fit the caption text      
    void SetAutoSize(BOOL bAutoSize = TRUE);      
    BOOL GetAutoSize();

    关于SetColour的注意事项:这允许指定未访问/访问和悬停的颜色。如果悬停颜色(光标在其上方时显示链接的颜色)为-1,则使用系统突出显示颜色。


一个功能强大的MFC界面处理扩展库:CJ60Lib 这是从网上搜集的一个扩展库,把它分享给大家! 简介: CJ60Lib是基于MFC基础之上的一个扩展库,主要是改进MFC的下述: CCJButton - ( CJButton.cpp and CJButton.h )对CButton的改进。 CCJComboBox - ( CJComboBox.cpp and CJComboBox.h )对CComboBox的改进。 CCJControlBar - ( CJControlBar.cpp and CJControlBar.h )对CControlBar的改进。 CCJFrameWnd - ( CJFrameWnd.cpp and CJFrameWnd.h ) CCJMDIFrameWnd - ( CJMDIFrameWnd.cpp and CJMDIFrameWnd.h ) CCJDockBar - ( CJDockBar.cpp and CJDockBar.h ) 这些重载了缺省的主框架布局,以增加3D效果到工具条。为了使用这些,仅将 CFrameWnd 改为 CCJFrameWnd,其中,CMainFrame 包含在 Mainfrm.h文件中,(对于MDI,采用CCJMDIFrameWnd)。 CCJOutlookBar - ( CJOutlookBar.cpp and CJOutlookBar.h )新增,用于实现Outlook中的工具条。 CCJPagerCtrl - ( CJPagerCtrl.cpp and CJPagerCtrl.h )新增,用于设置标签视或者对话框。 CCJTabCtrlBar - ( CJTabCtrlBar.cpp and CJTabCtrlBar.h )新增。 CCJToolBar - ( CJToolBar.cpp and CJToolBar.h )对CToolBar的改进。 CCoolMenuManager -( CoolMenu.cpp, Emboss.cpp and CoolMenu.h ) CSubclassWnd -( Subclass.cpp and Subclass.h ) 新增,用于改进已有的菜单。 CFlatToolBar - ( FlatBar.cpp and FlatBar.h ) Obsolete with VC 6.0 CModuleVersion - ( ModulVer.cpp and ModulVer.h ) 这是CCJToolBar的基。 CCoolBar, CRebarInfo - ( CoolBar.cpp and CoolBar.h ) Obsolete with VC 6.0 新增,用于实现Internet Explorer 4风格的工具条。 CHyperLink - ( HyperLink.cpp and HyperLink.h ) 超链接控件。 使用方法: 在Project Settings中选择General标签,Microsoft Foundation Class设置为 Use MFC in a shared DLL。 在Project Settings中选择Link标签,设置Category为Input,增加../Lib到Additional Library Path。 在Link标签中,改变Category为General,Output Name (所有配置)设置为../Lib。 选择C/C++标签,改变Category为Preprocessor,增加../Include到Additional Include Directories. 最后一步是添加下面两行代码到StdAfx.h头文件中: #define MFCX_PROJ #include 为了能静态链接到CJ60Lib,需要做下面修改: 在project settings对话框中,选择General标签,确保Microsoft Foundation Class设置为Use MFC in a static library。 添加下面代码到StdAfx.h 头文件,其将使库静态链接到应用程序: #define MFCXLIB_STATIC #define MFCX_PROJ #include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值