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

(假定静态文本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. 自动出借-python+selenium

    自动出借 import time from selenium import webdriver # import os #B username = " # 请替换成你的用户名 passwor ...

  2. 机器学习算法的调试---梯度检验(Gradient Checking)

    梯度检验是一种对求导结果进行数值检验的方法,该方法可以验证求导代码是否正确. 1. 数学原理   考虑我们想要最小化以 θ 为自变量的目标函数 J(θ)(θ 可以为标量和可以为矢量,在 Numpy 的 ...

  3. leetcode 22括号生成

    非常好的一道题.一开始的思想是这样的,先把n对括号按照某一顺序生成一个string,然后用全排列算法生成所有可能,然后利用stack写一段判断括号是否匹配的字符串,匹配的假如结果中.不过会超时.因为全 ...

  4. ROSETTA使用技巧随笔--relax使用

    Purpose: 主要说目的,relax的作用就是对一个给定的蛋白进行构象搜索,寻找与WT相似并能量低于WT的结构,既包含packer又包含minimizer.主要的应用在对一个结构构象进行取样,获得 ...

  5. 回车和刷新以及Ctr+F5的区别

    回车(url跳转)主要是判断本地缓存文件的Expires的有效时间,如果有效则直接使用客户端缓存 不在提交到HTTP服务器 F5 Expires设置不再起效果,只有Last-Modified/ETag ...

  6. 通过Response下载。

    之前一直在找js下载的插件,后来发现下载必须通过java后台处理,什么write(),open(),close()之类的方法.如果直接是通过<a>标签倒是简单的,直接将路径摆放在上面就可以 ...

  7. js的基本包装类型

    基本包装类型(包装对象): 先看下以下代码: var s1 = "helloworld"; var s2 = s1.substr(4); 上面我们说到字符串是基本数据类型,不应该有 ...

  8. ES6之箭头表达式

    ES2015新增的特性箭头表达式,省去了关键词function,文中``双撇号和${}是Typescript的语法.以下是一些学习笔记: 1.单行箭头表达式: var foo = (arg1,arg2 ...

  9. 001-http协议-请求报文以及服务器响应状态

    Http协议的几个概念: 1.连接(Connection):浏览器和服务器之间传输数据的通道. 一般请求完毕就关闭,http不保持连接.不保持连接会降低处理速度(因为建立连接速度很慢),保持连接的话就 ...

  10. ueditor上传图片配置成功,但是如何删除无用的图片

    我使用ueditor作为富文本编辑器,配置已经好了,上传功能也好了.现在的问题是当使用ueditor上传图片的时候,选择了图片就立刻上传到指定的文件夹里,而后续即使没有保存该篇文章内容,即取消操作,图 ...