探讨《如何在MFC设计超链接控件类》

c++学习 | MFC —— 控件介绍 VS2022中MFC的全部控件 阅读详情

《如何在MFC设计超链接控件类》

原文传送门:http://blog.kingsamchen.com/archives/517#comment-1912

运行之后一切都完美,只有一个问题,当弹出IE窗口挡住了Label之后,在切换会原来的程序,鼠标移动到Label上时不会再次显示手型鼠标指针。查询资料跟踪程序后发现:

void CLinkLabel::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    if (m_bTrack)
    {
        if (m_bMouseOn)
        {
            CRect rec;
            GetClientRect(&rec);

            // 鼠标离开了LinkLabel
            if (!rec.PtInRect(point))
            {
                m_bMouseOn = FALSE;
                ::ReleaseCapture();
            }
        }
        // 鼠标进入LabelLink
        else
        {
            m_bMouseOn = TRUE;
            SetCapture();

            // #define IDC_HAND  MAKEINTRESOURCE(32649)
            // 直接引用IDC_HAND需要添加头文件
            ::SetCursor(AfxGetApp()->LoadStandardCursor(MAKEINTRESOURCE(32649)));

            Invalidate(TRUE);
        }
    }
    CStatic::OnMouseMove(nFlags, point);
}

如果我鼠标悬停在CLinkLabel,如果突然有窗口阻挡了CLinkLabel所在的主窗口,鼠标再次移动到CLinkLabel,因为之前主窗口丢失了焦点,手型鼠标被重置成焦点窗口默认样式,SetCapture(手型)已经自动失效

鼠标不在CLinkLabel,不会发生CLinkLabel::OnMouseMove,鼠标在CLinkLabel,则 rec.PtInRect(point)==TRUE,不会进入进入if (!rec.PtInRect(point))执行m_bMouseOn = FALSE

,因此m_bMouseOn一直是等于TRUE,CLinkLabel认为鼠标一直在控件上,不会再次::SetCursor()。

通过论坛朋友帮助和网上查询咨询找到了两种解决方案:

1、在WM_SETCURSOR消息中执行SetCursor(论坛提供)

2、在PreTranslateMessage中截获WM_MOUSEMOVE,添加一个监视,如果鼠标离开则产生WM_MOUSELEAVE事件,然后处理之。传送门

PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
// m_ToolTip.RelayEvent(pMsg);
	switch( pMsg->message ){
		case WM_MOUSEMOVE:		//为了让系统产生上面的WM_MOUSELEAVE消息,你必需做如下处理
		TRACKMOUSEEVENT trmouse;
		trmouse.cbSize = sizeof(TRACKMOUSEEVENT);
		trmouse.dwFlags = TME_LEAVE;
		trmouse.dwHoverTime = 400;
		trmouse.hwndTrack = pMsg->hwnd;
		if(!_TrackMouseEvent(&trmouse))
			return FALSE;
		break;
	}
	return CLinkLabel::PreTranslateMessage(pMsg);
}
我选择了第一种,简单直接。第二种可以借鉴。


VC++ 中巧妙实现超链接控制  我们用MFC开发应用程序时,通常在窗口中放置大量的控件,通过触发这些控件的事件来完成我们的控制。但并不是每个控件都提供所有的事件消息,例如我们在对话窗口中加入一个静态文本控件(CState类),这时在ClassWizard中此控件没有任何消息,也就无法完成所要求的控制。VC++中为我们提供了一个API函数GetWindowRect(),此函数可以获得窗口中所有控件的位置,这样我们就可以在窗口的消 阅读详情

相关推荐

MFC Windows 程序设计[350]之超链接编辑框控件

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。......

hnjzfwy的博客 963

如何在MFC设计超链接控件类

关于如何在MFC设计自己的超链接控件类,KC之前写过这样的文章。额,其实那篇文章也就一代码……而且代码质量有点烂 于是经过重修Rebuild之后,把设计的详细过程加以分析~ 1.摘要   控件的超链接效果在程序的UI设计中是经常会碰到的。但是在MFC的低版本中(VS2008所对应的MFC 9之前的版本),并没有现成的控件可以使用(WTL在早期似乎就提供了类似的控件)。

caowei880123的专栏 2193

MFC Windows 程序设计[351]之超链接的简单例程

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。......

hnjzfwy的博客 996

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

有时我们需要在窗口上设置一个超链接,比如在Aboutdlg上设置“我的博客”这样的超链接.具体的设置方法如下。 1、首先我们在窗体上添加一个Static文本控件,修改Caption属性,设置成你想要的超链接标题,比如“更多内容欢迎访问小梦的博客”等。2、这步很重要。由于Static控件不具备设置超链接的能力,我们需要重写一个继承自CStatic的类CHyperLink. 这里可以直接复制两个文件

人至贱则无敌 3416

MFC Windows 程序设计[349]之多项超链接编辑框

MFC是微软公司提供的一个类库(class libraries),用以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。有很多初学MFC的小伙伴们都觉得MFC比较难学,看书吧,看了就忘了,网上的一些教程又是写的含糊不清,故而学习起来很吃力...... 故此,本专栏亲自研究,实践,由易到难,层层深入,将调试过程中所遭所遇进行详细讲解,注意事项进行一一列举,希望能够帮助到各位初学MFC的小伙伴,避免走弯路,费时费力。......

hnjzfwy的博客 938

MFC实现跳转超链接(附完整源码)

MFC实现跳转超链接(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 589

MFC所有控件介绍及基本使用

本篇文档介绍了MFC控件的基本使用,同时提供了关于MFC控件使用的工程代码,程序界面如下图,有兴趣的可以到文档最后的链接处进行下载。控件使用工程下载路径:https://download.youkuaiyun.com/download/linyibin_123/88565032。

linyibin_123的博客 6029

MFC中RichEdit控件的深入应用与实战教程

RichEdit控件是Microsoft Windows操作系统中用于创建富文本编辑器的基础组件。它支持文本的多种格式化选项,包括字体、颜色、大小、样式,以及超链接和图像的嵌入。开发者可利用RichEdit控件打造功能丰富的文本编辑器,适用于笔记应用、文本处理软件甚至代码编辑器等场景。RichEdit控件能够处理多种字符格式,允许多段落编辑,并提供基本的文本操作功能,如剪切、复制、粘贴。它还支持OLE(对象链接和嵌入)技术,可以嵌入其他文档,如Excel表格或PowerPoint演示文稿。

weixin_29781865的博客 804

mfc e将控件置于窗口顶层_VC|使用控件派生类实现超链接控件

设计应用程序时,为了让用户方便地通过程序访问某个网站,需要采用具有超级链接功能的控件。这样的一类控件可以从静态文本类CStatic派生。在Windows API中,控件用一个结构体来表示,用API函数来操作控件,在MFC中,将结构体和API函数封装为类,与控件相关的就封装为不同的控件类,类类型可以方便地实现继承和派生关系。1 新建一个基于对话框的应用程序website。2 新建两个静态文本控件,两...

weixin_39897758的博客 437

MFC扩展CStatic实现超链接与透明背景的静态文本控件

在MFC桌面应用开发中,原生CStatic控件功能单一,难以实现超链接跳转、鼠标悬停反馈与透明背景等常见交互效果,开发者往往需要依赖WM_CTLCOLORSTATIC消息处理或窗口子类化,导致代码分散且难以维护。CStaticEx作为CStatic的派生类,将自绘文本、背景透明、链路下划线及点击响应等能力封装于内部状态机与绘制链路中,通过重写OnPaint、处理CtlColor和TrackMouseEvent等机制,实现控件级解耦。该方案适用于对话框中的超链接提示、动态背景下的静态文本展示以及大型MFC项目

weixin_28733777的博客 221

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 128

MFC基本控件-静态文本的使用

MFC的基本空控件可以帮助大家快速做出一个可视化界面, 下面我将使用一个常见的采集表, 为大家说明常用基本控件的使用方法。 首先从最简单的静态文本开始。 环境:VS2019目录一.基本使用二.链接使用三.风格设置首先新建一个风格类的实例化对象第二步在主窗口的cpp文件中初始化 设置字体颜色 静态文本一般用于标识信息, 和代码中的注释类似。下面请看基本使用的举例: 首先在窗口上放置了六个控件, 默认为“static”的就是静态文本, 左键单击就可以修改默认值, 如图:

Lenn Louis' Scribe 2594

四大厂商网络设备巡检命令实战指南:华为、华三、锐捷、思科

本文详细介绍了华为、华三、锐捷、思科四大厂商网络设备的巡检命令实战指南,涵盖硬件状态、软件运行和网络功能等核心维度。通过具体命令示例和实用技巧,帮助网络工程师高效完成设备巡检,预防潜在故障,确保网络稳定运行。

weixin_29235923的博客 390

MFC控件扩展性设置(按钮、图片、超链接)

http://www.pudn.com/downloads91/sourcecode/windows/control/button/detail348849.html 1、把BtnST.cpp、BtnST.h、HyperLink.cpp、HyperLink.h、PictureEx.cpp、PictureEx.h、WinXPButtonST.cpp、WinXPButtonST.h添加到工程文件夹目

lebao82的专栏 1725

AI视频生成技术研究报告:现状、挑战与展望

AI 视频生成技术概述:介绍 AI 视频生成技术的基本概念,回顾其发展历程,从早期依赖图像拼接的简单生成方式,到如今融合多种先进技术的复杂模型应用,梳理技术演进的关键节点和重要突破。同时,分析该技术在当前阶段的特点,包括生成视频的质量、速度、灵活性等方面,以及与传统视频制作方式的差异,阐述 AI 视频生成技术如何改变视频创作的流程和模式。技术实现路径分析。

daqsdfas的博客 4574

从零构建知识图谱:本体工程与知识建模实战指南

本文是一份从零构建知识图谱的实战指南,重点阐述了知识建模与本体工程的核心地位。文章详细介绍了如何使用Protégé工具进行本体设计,包括定义领域、复用现有本体、构建类层次与属性约束,并讲解了如何利用D2RQ工具将关系数据库数据转换为RDF三元组,最终通过Apache Jena Fuseki搭建SPARQL端点进行知识查询与推理,让知识图谱真正“活”起来。

weixin_29057695的博客 568

【MFC】MFC控件大全

MFC框架提供了丰富的Windows控件封装,包括按钮、编辑框、列表框等基础控件以及树形、选项卡等高级控件。主要控件类包括CButton(按钮/复选框)、CEdit(编辑框)、CComboBox(组合框)等,每种控件都有特定用途和样式设置。这些控件通过MFC类简化了Windows GUI开发,支持从简单的文本显示到复杂的日期选择、IP输入等功能。开发者可根据需求选择合适的控件类型,通过风格属性配置其外观和行为。

2401_87310667的博客 493

实战避坑:在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时,必须搞清的P2P DMA与IOMMU那些事

本文深入探讨在Ubuntu 22.04上配置NVIDIA GPU Direct RDMA时P2P DMA与IOMMU的关键问题,解析PCIe架构中的地址转换、P2P DMA与标准DMA的区别,以及IOMMU对性能的影响。通过实战案例和调优建议,帮助用户避免常见配置陷阱,提升AI训练集群的数据传输效率。

weixin_33720078的博客 441

MFC|Toolbox内控件简单介绍

MFC toolbox 控件简单介绍

编程改变世界。想做一些改变世界的产品。感谢一键三连。 2499

工业模型导入Unity实战:从ProE/SolidWorks到实时渲染的完整流程

在工业仿真、数字孪生和VR/AR应用开发中,将高精度工程模型导入实时渲染引擎是一个常见的技术挑战。其核心原理在于参数化工程软件与实时渲染引擎的数据结构差异:前者基于精确的B-rep边界表示和特征树,后者依赖轻量化的三角网格与材质贴图。这一转换的技术价值在于实现工程数据的可视化与交互化,为产品展示、虚拟培训和工厂仿真等应用场景提供基础。通过数据翻译与优化流程,特别是利用3ds Max或Blender作为中转站进行网格优化与UV展开,能够有效解决模型破面、材质丢失和性能问题。本文聚焦于ProE(Creo)和So

weixin_33050117的博客 344

3步搞定专利数据爬取:用Selenium绕过国家知识产权局反爬(附完整代码)

本文详细介绍了3种高效获取专利数据的技术方案,重点解析了使用Selenium绕过国家知识产权局反爬的实战方法,并提供了完整代码示例。文章还探讨了Requests+lxml轻量级方案和混合技术策略,帮助开发者根据需求选择最佳数据爬取方案,特别适合需要专利统计数据的开发者参考。

weixin_29029995的博客 1110

MFC添加list control控件并用表格对txt数据显示、格式化、超链接

(一)    list control控件的建立 (1)新建【MFC】,从【工具箱】中将【list control】控件拖选到DiaLog下; (2)然后点击【list control】控件,【右击】,【属性】,将【view】设置为【Report】,效果如下:                       (3)【右击】,【类向导】,【成员变量】,【添加变量】,【m_list】,如图: ...

肥羊汤 9837

Foxglove 介绍以及入门使用教程

Foxglove 是由Foxglove 工作室开发的一套工具集,包括和等组件。跨平台支持:可以在 Windows、macOS 和 Linux 上运行。多协议兼容:支持 ROS、ROS 2、CAN 数据以及其他自定义协议。丰富的可视化功能:可以绘制点云、轨迹、激光雷达数据、IMU 数据等。实时与离线模式:既可以实时监控机器人状态,也可以加载和回放记录的数据文件。Foxglove 的 3D 视图允许你以三维方式查看机器人的运动轨迹、传感器数据和其他几何信息。你可以旋转、缩放和平移视图以获得更好的观察角度。

zolty 1万+

MFC 自定义静态文本控件:增强型标签控件

这篇博客实现了高度可定制的MFC自定义控件CLabel,支持背景、文本、边框及圆角设置,提供更丰富的视觉效果和交互体验。

Darker的博客 1695

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MFC Static 控件详解:文本显示与图像展示的全能工具

本文全面介绍了MFC中Static控件的使用方法。作为基础组件,Static控件不仅用于显示文本和图像,还能实现交互功能。文章详细讲解了控件的创建方式(资源编辑器和动态创建)、常用操作(文本设置、图像显示、状态控制)、消息处理机制(点击和鼠标事件)、高级应用(超链接效果、绘图容器、动态文本)以及常见问题解决方案。通过合理运用Static控件的属性和消息机制,开发者可以将其从简单的显示元素扩展为功能丰富的界面组件,提升MFC应用程序的用户体验。

code_pranger的博客 1296

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

CXHyperLink类静态库实现超链接

一:申明该类的编码实现是在参考www.codeproject.com上的代码时发现的,"Single Server, Multiple Clients - Win32MFC classes for clientserver communication with Unicode support"我只是作为学习把该类提取出来编译成静态库文件而已,方便自己使用。以下是作者在代码文件中的申明,敬请注意。/

Docoocoo的專欄--做酷 1687

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

上一篇: 用HOOK来修改API函数的功能 @之禁止删除文件
下一篇: 微软也会错,后置++很危险!
darkread
博客等级 码龄25年 42粉丝 81原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值