#pragma once
#include "afxwin.h"
class CHyperLink:public CStatic
{DECLARE_DYNAMIC(CHyperLink)public:CHyperLink();virtual ~CHyperLink();public:void SetURL(CString strURL);CString GetURL() const;void SetColor(COLORREF clr, BYTE clrItem);//设置颜色COLORREF GetColor(BYTE clrItem);//得到颜色
protected:virtual void PreSubclassWindow();// Implementation
protected:int GotoURL(LPCTSTR url, int showcmd);
// Protected attributes
protected:COLORREF m_clrHot;      // Link normal colorCOLORREF m_clrNor;      // Link active colorCOLORREF m_clrBG;       // Link active colorBOOL     m_bHot;        // Is the link active?CString  m_strURL;      // Hyperlink URL string// Generated message map functions
protected:
//{{AFX_MSG(CHyperLink)afx_msg void OnMouseMove(UINT nFlags, CPoint point);afx_msg void OnLButtonUp(UINT nFlags, CPoint point);afx_msg void OnPaint();afx_msg LRESULT  OnMouseHover(WPARAM wParam, LPARAM lParam);afx_msg LRESULT  OnMouseLeave(WPARAM wParam, LPARAM lParam);afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);protected:DECLARE_MESSAGE_MAP()
};#include "stdafx.h"
#include "HyperLink.h"IMPLEMENT_DYNAMIC(CHyperLink, CStatic)CHyperLink::CHyperLink()
{m_bHot = FALSE;    // Control doesn't own the focus yetm_strURL.Empty();               // Set URL to an empty stringm_clrHot = RGB(0, 0, 255);m_clrNor = RGB(0, 0, 255);m_clrBG = RGB(240, 240, 240);
}CHyperLink::~CHyperLink()
{
}BEGIN_MESSAGE_MAP(CHyperLink, CStatic)
//{{AFX_MSG_MAP(CHyperLink)ON_WM_MOUSEMOVE()ON_WM_LBUTTONUP()ON_WM_PAINT()ON_MESSAGE(WM_MOUSEHOVER, &OnMouseHover)ON_MESSAGE(WM_MOUSELEAVE, &OnMouseLeave)ON_WM_SETCURSOR()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/
void CHyperLink::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
DWORD dwStyle = GetStyle();
::SetWindowLong(GetSafeHwnd(), GWL_STYLE, dwStyle | SS_NOTIFY);//  SetFont(GetParent()->GetFont());CStatic::PreSubclassWindow();
}void CHyperLink::OnMouseMove(UINT nFlags, CPoint point)
{TRACKMOUSEEVENT tme;tme.cbSize = sizeof(tme);tme.hwndTrack = m_hWnd;tme.dwFlags = TME_LEAVE | TME_HOVER;tme.dwHoverTime = 1;_TrackMouseEvent(&tme);//  CStatic::OnMouseMove(nFlags, point);
}//鼠标在上面
LRESULT CHyperLink::OnMouseHover(WPARAM wParam, LPARAM lParam)
{if (!m_bHot){m_bHot = TRUE;Invalidate();}return TRUE;
}//鼠标离开
LRESULT CHyperLink::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{m_bHot = FALSE;Invalidate();return TRUE;
}void CHyperLink::OnLButtonUp(UINT nFlags, CPoint point)
{if (m_strURL.IsEmpty()){GetWindowText(m_strURL);}GotoURL(m_strURL, SW_SHOW);
}void CHyperLink::SetURL(CString strURL)
{m_strURL = strURL;
}CString CHyperLink::GetURL() const
{return m_strURL;
}int CHyperLink::GotoURL(LPCTSTR url, int showcmd)
{HINSTANCE result = ShellExecute(NULL, _T("open"), url, NULL, NULL, showcmd);return (int)result;
}void CHyperLink::OnPaint()
{CPaintDC dc(this); // device context for painting   // TODO: Add your message handler code hereCFont* pFont = GetFont();CFont m_Font;if (pFont != NULL){LOGFONT lf;pFont->GetLogFont(&lf);lf.lfUnderline = m_bHot;if (m_Font.CreateFontIndirect(&lf))dc.SelectObject(m_Font);}if (m_bHot){dc.SetTextColor(m_clrHot);}else{dc.SetTextColor(m_clrNor);}dc.SetBkMode(TRANSPARENT);///准备工作CRect rect;CBrush BGBrush, *pOldBrush;int nTextLeft = 4, nTextTop = 2; //文字输出的位置this->GetClientRect(&rect);//画背景BGBrush.CreateSolidBrush(m_clrBG);pOldBrush = dc.SelectObject(&BGBrush);dc.FillRect(&rect, &BGBrush);dc.SelectObject(pOldBrush);BGBrush.DeleteObject();///输出文字TEXTMETRIC tm;dc.GetTextMetrics(&tm);CString strText;this->GetWindowText(strText);nTextTop = rect.top + (rect.Height() - tm.tmHeight) / 2;if (strText.GetLength() > 0){dc.TextOut(nTextLeft, nTextTop, strText);}BGBrush.DeleteObject();m_Font.DeleteObject();
}BOOL CHyperLink::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call defaultif (m_bHot){::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(32649)));return TRUE;}return CStatic::OnSetCursor(pWnd, nHitTest, message);
}CHyperLink m_stWebOne;void CSstemPatchDlg::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);DDX_Control(pDX, IDC_STATIC_ONE, m_stWebOne);DDX_Control(pDX, IDC_STATIC_TWO, m_stWebTwo);}m_stWebOne.SetURL(L"https://docs.microsoft.com/zh-cn/security-updates/Securitybulletins/2017/ms17-010");

MFC静态文本超链件相关推荐

  1. mfc静态文本框透明

    mfc静态文本框透明针对某一对话框分为三步完成: 1.xxxDlg.h中添加消息     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nC ...

  2. 中年人学C语言Windows程序设计,21静态文本框控件和创建自己的字体

    Windows static控件(静态文本框控件) 使用 TextOut 和 DrawText 函数有时候会不方便,例如: 文本不能自动换行,超出窗口范围会被隐藏: 每次更改文本都要先擦除背景再重新输 ...

  3. MFC静态文本控件设置超链接

    有时我们需要在窗口上设置一个超链接,比如在Aboutdlg上设置"我的博客"这样的超链接.具体的设置方法如下. 1.首先我们在窗体上添加一个Static文本控件,修改Caption ...

  4. vs mfc 静态文本 改变字体大小

    VC的对话框字体设置对所有控件都有效,你不能单独地改变某个静态文本的字体.对于你的问题,需要首先用CreateFont来建立一个字体对象,然后调用控件的SetFont,就可以了.  例子:  1.改静 ...

  5. MFC静态文本框的背景色设为透明

    今天师兄要求在界面加上学校的名字,但是加上后发现底色不透明,找了半天设置好了,下面把过程发下. 1.在dlg里面邮件选择 "类向导" 2.进入类向导,先点击 "消息&qu ...

  6. MFC中修改静态文本框中文字的字体、颜色

    假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj. 设置字体时自然要用到CFont类,下面介绍两种方法 ...

  7. 文本显示器-静态文本控件功能一览

    静态文本显示控件的功能基本定型了. 顾名思义,静态文本就是显示预先设定好的静态文本字符串. 字符串可以支持任意字符,可以在任意位置显示. 字符串水平方向支持 左/中/右三种对齐方式. 垂直方向支持 上 ...

  8. MFC中的edit控件

    edit control 编辑框 static control 静态文本框控件 Button 按钮控件 第一步,在VS2019中新建一个MFC项目: 第二步,打开资源视图,双击打开窗口,在工具栏中选择 ...

  9. 【MATLAB】在MATLAB中利用GUI编写加法计算器,要求:通过两个编辑文本框实现两个数字的输入,点击“开始计算”按钮进行计算,并在用于结果显示的静态文本框中实现两输入数字的和的显示

    1)打开Matlab,点击工具栏上的[File]–>New–>GUI,命名为:addnum.fig  2)在addnum.fig面板里,拖曳3个静态文本TXT控件(不做任何修改).3个编辑 ...

最新文章

  1. C#模拟鼠标键盘控制其他窗口(一)
  2. zk如何实现watch
  3. 07-IP组播配置指导
  4. 爬数据html解析,jsoup网络爬取数据HTML解析
  5. 什么是 SAP Spartacus UI 的 direction 服务
  6. LeetCode-Maximal Rectangle-最大矩形
  7. 安卓10可用的性能监视器_iPad 秒变监视器,无线图传设备真的有用吗?
  8. OpenCV-实现直方图均衡化(对比cv::equalizeHist)
  9. 系统学习数字图像处理之描绘子
  10. C++重载运算符的规则详解
  11. Python实践通过使用XGBoost中的尽早停止【Early Stopping】策略来避免过度拟合
  12. 解决在IE浏览器中JQuery.resize()执行多次的方法(转)
  13. ASC19 初赛要求自翻译
  14. Pygame实战:多年后“魂斗罗”像素风归来 不止是经典与情怀@全体成员
  15. 少有人走的路 - 读书笔记
  16. 如何使用Adobe Acrobat对PDF文档进行电子签名
  17. 智飞生物与碧迪医疗战略合作;奥的斯智慧服务实验室完成升级 | 美通企业日报
  18. 怎么找到一抛物线数组的顶点_抛物线与顶点坐标的关系如何确定抛物线开口是向上还是向下?知道抛物线的定点坐标,和x轴的交点或y轴的交点,怎么求抛物线的解析式?抛物线的顶点坐标与抛物线还有什么关系?...
  19. 下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换
  20. oracle ora 00910,ORA-00910: 指定的长度对于数据类型而言过长

热门文章

  1. 学生PHP校园超市网站制作 学生PHP网页毕设源码 学生动态数据库网站作品 PHP电子商务商城购物网站
  2. 如果你是一位资深的玩机人士,那么你不能错过它——uTools
  3. NOI入门级数学: 数及其运算 数的进制之二进制
  4. 第61课 查分程序 《小学生C++趣味编程》
  5. 1.5编程基础之循环控制_45金币
  6. python0b1011_1011 A+B 和 C (15分)Python参考答案
  7. Java笔记-Java中桥接模式
  8. Spring Boot笔记-普通异常错误截取及构造错误页面
  9. 软考系统架构师笔记-最后知识点总结(二)
  10. Qt文档阅读笔记|Qt实践| HTTPS知识点-获取某站点SSL证书