mfc鼠标指针变为手型问题

本文介绍如何在Visual Studio 2010中为静态文本添加超链接,并解决鼠标形状在超链接区域显示异常的问题。通过调整鼠标光标的加载方式,确保在静态文本框上能正确显示手形鼠标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在VC的静态文本下,可以通过响应WM_MOUSEMOVE和WM_LBUTTON消息的方法来完成嵌入超链接,这个方法在很多网上的文章都有叙述,在此就不多说了,想看原文的,可以看这里:
http://blog.youkuaiyun.com/wangningyu/archive/2009/08/07/4423442.aspx
但是在Visual Studio 2010下测试时,发现,尽管超链接可以完美的启动,但是每当鼠标进入响应区域时,就会消失不见。
检查了一下每个函数和调用,似乎都没有问题。这是写在CxxxxDlg的鼠标响应函数中的鼠标变化代码,其中CxxxxDlg::m_pRectLink是CRect型的变量,用来存储被设置为超链接的静态文本框的位置和尺寸:
  1. if (point.x > m_pRectLink.left && point.x < m_pRectLink.right && point.y > m_pRectLink.top && point.y < m_pRectLink.bottom )    
  2.      {  
  3.          HCURSOR hCursor;  
  4.          hCursor = AfxGetApp() -> LoadCursor(IDC_HAND);  
  5.          SetCursor(hCursor);  
  6.      }  
复制代码
检查了一下AfxGetApp的MSDN定义:
The pointer returned by this function can be used to access application information such as the main message-dispatch code or the topmost window.

发现AfxGetApp所得到的,其实就是theApp全局变量,是整个程序最低层的部分,AfxWinMain的入口点。而Dlg类则是运行于theApp之上的,所以在theApp中定义的鼠标,就被在上方的Dlg类遮盖了。
解决方法显然也有那么几个,但是这里用个最简单的方法。只需要把代码
  1. hCursor = AfxGetApp() -> LoadCursor(IDC_HAND);
复制代码
替换为
  1. AFX_GLOBAL_DATA agd;
  2. hCursor = agd.GetHandCursor ();
复制代码
即可在静态框上正常显示手状鼠标了。
新手,欢迎吐槽……

更新:AFX_GLOBAL_DATA类(虽然写的是structure)存在于afxglobals.h中,该头文件仅在VS 2010中存在。经过测试,在VS 2008中也存在着使用AfxGetApp()->LoadCursor()无法正常工作的问题。此时,可以直接不考虑使用程序的指针,而直接使用全局成员函数,也就是系统API。即:
  1. hCursor = ::LoadCursor (NULL, IDC_HAND);
  2. //由于不需要理会是否集成窗口句柄,所以第一个参数直接写为NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值