最近写一个小的对话框程序时,想加一个文本超链接,研究了一下,发上自己的研究成果,供大家参考。下面说说完整的步骤。

(假定静态文本ID为ID_STATIC)

首先,设置鼠标的形状及响应鼠标点击

第一步,在Dlg类中定义一个protect成员变量HCURSOR  m_hCursor,

在构造函数里(或者在OnInitDialog()里)调用语句

m_hCursor=AfxGetApp()->LoadCursor(IDI_CURLINK);加载鼠标;

第二步,在Dlg类中定义一个protect成员变量RECT  m_StaticRect,表示静态文本的坐标,在成员函数OnInitDialog()里调用语句

GetDlgItem(IDC_STATIC)->GetWindowRect(&m_StaticRect);

ScreenToClient(&m_StaticRect);

第三步,加载鼠标移动消息,在OnMouseMove()里调用语句

if( point.x > m_StaticRect.left && point.x < m_StaticRect.right &&
    point.y > m_StaticRect.top  && point.y < m_StaticRect.bottom ) 
    { 
       SetCursor(m_hCursor); 
    }

第四步,加载鼠标单击消息,在OnLButtonDown()里添加语句

if( point.x > m_StaticRect.left && point.x < m_StaticRect.right &&point.y > m_StaticRect.top  && point.y < m_StaticRect.bottom )
{
SetCursor(m_hCursor);
ShellExecute(NULL,"open",TEXT("http://www.tlu.edu.cn"),NULL,NULL, SW_SHOWNORMAL);
}

注意,若是邮箱,则改为ShellExecute(NULL, "open",_T("mailto:apeng332@sohu.com"), NULL, NULL, SW_SHOWNORMAL);

在鼠标单击抬起的时候最好也加上SetCursor(m_hCursor);使得鼠标的移动更流畅,鼠标右键消息也可以加上SetCursor(m_hCursor)。

其次,设置静态文本的字体与颜色

第一步,字体的设置:在Dlg类中定义一个protect成员变量CFont m_Font表示字体,在类的成员函数OnInitDialog()里调用m_Font.CreateFont(……),注意参数很多,参考MSDN。接着编写两行代码:

CStatic *m_static=(CStatic *)GetDlgItem(IDC_STATIC);

m_static->SetFont(&m_Font,false);

第二步,颜色的设置:在Dlg中加载WM_CTLCOLOR消息,在此消息的响应函数OnCtlColor(……)里添加如下代码:

HBRUSH CScreenShotsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if (pWnd->GetDlgCtrlID() == IDC_STATIC)
     {
       pDC->SetTextColor(RGB(255, 0, 0));
     }
    return hbr;
}

即可

注:本文引用自http://www.cppblog.com/codepeng/archive/2011/05/01/145440.html

MFC超链接的更多相关文章

  1. MFC超链接静态类的使用

    源代码:http://download.csdn.net/detail/nuptboyzhb/4197151 CHyperLink类,是由CStatic类派生出来,重载了CStatic类的如下函数: ...

  2. MFC中 用Static控件做超链接(可以实现变手形、下划线、字体变色等功能)

    1.新建一个基于对话框的工程MyLink,在对话框中拖一个Static控件,ID可改为IDC_SLink. 2.在头文件中添加成员变量: private: CRect m_Rect; CFont* m ...

  3. [Sciter系列] MFC下的Sciter–2.Sciter中的事件,tiscript,语法

    [Sciter系列] MFC下的Sciter–2.Sciter中的事件,tiscript,CSS部分自觉学习,重点说明Tiscript部分的常见语法和事件用法. 本系列文章的目的就是一步步构建出一个功 ...

  4. MFC 文件操作

    MFC中文件的建立 在操作系统中,文件是放在一定的目录下,在创建以及操作文件以前,我们要查看文件要保存的目录有没有存在,如果不存在要创建.这就要用到GetFileAttributes()和Create ...

  5. win32进阶之路:给锁屏软件增加一个超链接按钮

    前言: windows下一切皆窗口,我们看到的超链接也是窗口,效果图如下: 鼠标放在赵大哥博客园主页和关于软件两个按钮上,按钮上的字体会从绿色变成红色,同时鼠标指针变为手型,点下鼠标左键就会调用默认浏 ...

  6. SonicUI在MFC中的使用

    SonicUI是一个GUI引擎,提供了一些简单的UI组件实现高效率的UI效果,例如:自绘按钮.异形窗体.动画.超链接和图像操作方法.此项目作者开源到CodeProject,地址为:http://www ...

  7. VC/MFC ListCtrl 控件功能使用汇总(转)

    以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 “ListView_”开头的一些宏.如 ListView_InsertCol ...

  8. 用MFC实现WebGUI--(CDHtmlDialog)

    自从去年年底一次棘手的界面,开始研究用web做界面到现在大约1年,这一年间不是局限在实现层面,也并非一直研究这一个问题,有很多问题其实不是问题,只是自己没有想清楚或者思想没放开.对于一个界面开发人员, ...

  9. MFC控件(8):command button与syslink control

    在VS 2008里MFC多了4种控件,分别是 split buttons ,command button , syslink controls和 network address controls. s ...

随机推荐

  1. 利用 PorterDuff 动态改变资源色值,缩减安装包大小

    利用 PorterDuff 改变资源原有色值,从而实现只需要一个资源文件,就可以表示几种不同的状态,如在线或者离线等等 public Drawable colorDrawable(Resources ...

  2. IOP知识点(3)-Modal.show

    1.position 模态框初始位置.可设为字符串 "左位置 上位置" 或数组 [左位置, 上位置],规则如下: 左位置 可设为 left|center|right 三者之一,上位 ...

  3. Eclipse如何导入DemoWeb.rar

    1   安装gradle,https://my.oschina.net/cccyb/blog/692487 2  import---Gradle Project,然后 Build Model 3  点 ...

  4. 论文阅读-使用隐马模型进行NER

    Named Entity Recognition in Biomedical Texts using an HMM Model  2004年,引用79 1.摘要 Although there exis ...

  5. 【设计模式】用追MM来解释23种设计模式,转

    创建型模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基 ...

  6. eclipse签名使用的key文件(android生成keystore)

    命令行(或终端)生成keystore文件     在命令行(或终端)输入命令: keytool -genkey -alias Gallery.keystore -keyalg RSA -validit ...

  7. UVA 11178 Morley's Theorem(几何)

    Morley's Theorem [题目链接]Morley's Theorem [题目类型]几何 &题解: 蓝书P259 简单的几何模拟,但要熟练的应用模板,还有注意模板的适用范围和传参不要传 ...

  8. div上下左右居中方法

    方法一:在浏览器中只有一个div的情况 { position:fixed; position:fixed; ; ; ; ; margin:auto; } 方法一 方法二:一个父元素div和一个已知宽度 ...

  9. Oracle使用rman备份数据库时出现cannot reclaim的错误

    1. 按照<2 day DBA>中的guide,设置fast recovery area. SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_S ...

  10. vs远程调试 转http://www.cnblogs.com/magicchaiy/archive/2013/05/28/3088274.html

    远程调试应用场景 部署环境:ASP.NET(C#)+IIS+Win7 64 bit 很多公司的开发模式都是将开发机器和服务器分开,也就是开发一台机,服务器一台机.而测试人员会在服务器上录入测试数据,此 ...