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

(假定静态文本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. windows系统redmine安装总结

    今天在公司服务器上安装了redmine,主要用于项目管理和缺陷跟踪.安装过程比较简单,总结如下: 1.网上下载redmine安装包(bitnami-redmine-3.3.1-0-windows-in ...

  2. 011-docker-安装-rabbitmq-management:3.7.13

    1.搜索镜像 docker search rabbitmq 2.拉取合适镜像 选择合适tag:https://hub.docker.com/,下载3.7.13 带web管理界面版本 docker pu ...

  3. java -jstack

    一.介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项&qu ...

  4. dataframe操作

    1.去除重复项drop_duplication #去除重复项drop_duplication import pandas as pd df = pd.DataFrame({"col1&quo ...

  5. 在function module 中向数据库插入数据

    http://www.sapjx.com/abap-function-module.html 1: 应该在function module 中向数据库插入数据

  6. C 函数声明及求最大值

    #include <stdio.h> int main() { int a,b,c,max(int x,int y,int z); scanf("%d,%d,%d",& ...

  7. 微信小程序echart 折线图legend不显示的问题

    最近使用小程序echart折线图,遇到表头一直不显示问题,查询之后解决方案:

  8. centos7 yum 安装mysql5.6

    这里用科技大学的mysql yum源官方的源太慢 [root@localhost ~]# rpm -ivh http://mirrors.ustc.edu.cn/mysql-repo/mysql-co ...

  9. 【转】JsonPath教程

    https://blog.csdn.net/koflance/article/details/63262484 1. 介绍 类似于XPath在xml文档中的定位,JsonPath表达式通常是用来路径检 ...

  10. 动手动脑(&课后实验):生成随机数,函数的重载

    一.编写一个方法,使用纯随机数生成算法生成指定数目(比如1000个)的随机整数. 1.程序源代码 import java.util.Scanner; import java.util.Random; ...