1、新建一个基于对话框的工程MyLink,在对话框中拖一个Static控件,ID可改为IDC_SLink。

2、在头文件中添加成员变量:

private:
 CRect m_Rect;
 CFont* m_cfNtr;
 CFont m_cfUL;
 LOGFONT m_lfNtr, m_lfUL;
 COLORREF m_color;
 CBrush m_brush;

3、在.cpp文件中利用类向导添加初始化虚函数,并添加代码:

BOOL CMyLinkDlg::OnInitDialog()
{
CDialog::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
GetDlgItem(IDC_SLink)->GetWindowRect(&m_Rect);
ScreenToClient (&m_Rect); m_cfNtr = this->GetFont();
m_cfNtr->GetLogFont ( &m_lfNtr );
m_cfNtr->GetLogFont ( &m_lfUL );
m_lfUL.lfUnderline = TRUE;
m_cfUL.CreateFontIndirect ( &m_lfUL ); m_brush.CreateSysColorBrush ( COLOR_MENU );
m_color = RGB (,,); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

再利用类向导添加下面几个消息:

void CMyLinkDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CString strLink;
UpdateData(TRUE);
GetDlgItem(IDC_SLink)->GetWindowText(strLink);
if (point.x > m_Rect.left && point.x < m_Rect.right && point.y < m_Rect.bottom && point.y > m_Rect.top )
{
ShellExecute (NULL, NULL, strLink,NULL, NULL, SW_NORMAL);
} CDialog::OnLButtonUp(nFlags, point);
}
void CMyLinkDlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if ( point.x > m_Rect.left && point.x < m_Rect.right && point.y < m_Rect.bottom && point.y > m_Rect.top )
{
HCURSOR hCursor;
hCursor = ::LoadCursor ( NULL, IDC_HAND );
::SetCursor ( hCursor ); GetDlgItem(IDC_SLink)->SetFont ( &m_cfUL ); m_color = RGB (,,);
CStatic* m_pStatic = (CStatic*)GetDlgItem(IDC_SLink);
m_pStatic->RedrawWindow ();
}
else
{
GetDlgItem(IDC_SLink)->SetFont ( m_cfNtr ); m_color = RGB (,,);
CStatic* m_pStatic = (CStatic*)GetDlgItem(IDC_SLink);
m_pStatic->RedrawWindow();
} CDialog::OnMouseMove(nFlags, point);
}
HBRUSH CMyLinkDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何属性
if ( nCtlColor == CTLCOLOR_STATIC )
{
pDC->SetBkMode ( TRANSPARENT );
pDC->SetTextColor ( m_color ); return (HBRUSH)m_brush.GetSafeHandle ();
} // TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}

效果图如下:

资料来源:http://www.pudn.com/downloads513/sourcecode/windows/shell/detail2129288.html

MFC中 用Static控件做超链接(可以实现变手形、下划线、字体变色等功能)的更多相关文章

  1. MFC中动态添加控件----寻找多年的秘籍,吐血推荐

    原文作者tianwaik 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立 ...

  2. VC/MFC中的CComboBox控件使用详解

    CComboBox控件详解 CComboBox控件又称作组合框控件,其有三种形态可供选择,1.简单组合框(Simple)2.下拉组合框(Drop-down)3.下拉列表式组合框(Drop-down l ...

  3. MFC中开发ocx控件,html容器收不到ocx的事件Event

    问题背景: MFC开发ocx控件,主窗口就是ctrl类,主窗口类中调度接口和事件映射添加,执行OK,外部html容器中接收事件成功,如下: ctrl.h中声明事件映射函数 void EVTPENSIG ...

  4. MFC中给各个控件填充背景颜色的方法

    1.给程序设置大背景色,在OnPaint()函数中添加如下代码: CRect rect; CPaintDC dc(this); GetClientRect(rect); dc.FillSolidRec ...

  5. MFC中的CListControl控件

    一直想要这种效果,无奈刚开始用了cListbox控件,不知道怎么生成背景的边框,找了好久资料,突然发现好像控件用错了. 用CListControl控件实现图中效果,超级开心~ 实现过程: 添加一个Li ...

  6. MFC中关于CListBox控件添加水平滚动条

    首先是设置listbox控件的属性  Horizontal Scroll设为TRUE: 然后添加函数到CUighurRecognitionDlg.cpp(在CUighurRecognitionDlg. ...

  7. WPF 中使slide控件拖动完成后改变变量值

    这个问题一开始觉得还是挺简单的,网上也看到不少解决方案. 首先一个最简单最直接的方案就是自定义一个名为FinalValue的依赖属性.随后重载OnThumbDragCompleted函数,在Thumb ...

  8. MFC中控制COMBOBOX控件的下拉框高度

    这是使用Visual Stiduo的小技巧哦.今天上网找来的.在界面设计面板上,点击ComboBox的下拉箭头,会另外出现一个虚边框.可以调整其大小.这个就是实现运行的时候下拉边框的默认值啦.

  9. OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中

    OpenCV 2.2 以及后面的版本号取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序猿无法调用里面的显示函数来将图片显示到 MFC 的 Picture Co ...

随机推荐

  1. linux系统ssh远程连接检查脚本

    脚本用于检查Linux系统云服务器出现的常见远程不能连接问题,脚本可以提前放到服务器里,出现问题时可以web vnc登陆上去执行试试. 附:管理控制台终端web vnc 方式登录,参考:http:// ...

  2. Mysql实战之索引

    author:JevonWei 版权声明:原创作品 索引基础: 索引:提取索引的创建在的表上字段中的数据,构建出一个独特的数据结构: 索引的作用:加速查询操作:副作用:降低写操作性能: 表中数据子集: ...

  3. Log4j官方文档翻译(七、日志格式化)

    apache log4j提供各种layout对象,然后根据自己指定的layouts对象转化日志信息.通常来说都是应用量身定制layout对象转换信息格式. 所有的layout对象从Appender对象 ...

  4. java--Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改

    Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改 一.每次输入都自动提示 点击Eclipse,使其成为第一响应者,preferences->Java->Editor ...

  5. SQLServer (2005/2008) 日志清理方法

    --数据库日志名称查询 USE DBNAME GO SELECT file_id, name,* FROM sys.database_files; GO------------------------ ...

  6. linux之创建临时文件的方法

    有时候,我们需要创建文件临时存放一些输出的信息,创建文件时就可能出现文件名存在的问题.如何创建唯一的文件名,Linux为我们提供几个方案: 1.mktemp(强烈推荐) The  mktemp  ut ...

  7. Java语法糖(一)

    概述 语法糖(Syntactic Sugar):主要作用是提高编码效率,减少编码出错的机会. 解语法糖发生在Java源码被编译成Class字节码的过程中,还原回简单的基础语法结构. 语法糖之一:泛型( ...

  8. COGS【831】最短网络

    831. [USACO 3.1] 最短网络 ★   输入文件:agrinet.in   输出文件:agrinet.out   简单对比 时间限制:1 s   内存限制:128 MB usaco/agr ...

  9. EntityFramework4.1 MODEL代码生成器 database first

    原文发布时间为:2011-04-02 -- 来源于本人的百度文章 [由搬家工具导入] Generating EF Code First model classes from an existing d ...

  10. web.config add handlers and httpmodule to System.Web section.

    <?xml version="1.0" encoding="utf-8"?> <!-- For more information on how ...