消失掉的鼠标

          今天在看别人写的代码,其中用到一个按钮类,该类的一个效果是在鼠标移动到该窗口时,鼠标形状发生变化,但是实际运行时,发现移动到该窗口时鼠标不见了,于是查看源代码,表面上看OnMouseMove没有问题,

		HRGN hRgn = CreateRectRgn(0, 0, 0, 0);
		GetWindowRgn(hRgn);		

		if ( PtInRegion( hRgn, point.x, point.y ))
		{
			::SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
			if ( !m_bMouseIn)
			{
				m_bMouseIn = TRUE;
				Invalidate();
				UpdateWindow();
				SetCapture();
			}
		}
		else
		{
			if ( m_bMouseIn)
			{
				m_bMouseIn = FALSE;
				//GetRegion();
				Invalidate();
				UpdateWindow();
				if ( !m_bDown )
					ReleaseCapture();
			}

		}
		DeleteObject(hRgn);

最后搜索了相关的资料,有人说到在OnMouseMove函数中改变鼠标会引起闪烁等等,开始以为问题就出在这,于是按照文章说的响应消息函数OnSetCursor

::SetCursor(AfxGetApp()->LoadCursor(IDC_HAND));
return TRUE;

结果问题同样没有得到解决,于是又继续找答案,这个时候发现用LoadStandardCursor(IDC_HAND)替换后问题得到解决,于是再次分析,发现问题出在函数的调用上,AfxGetApp()->LoadCursor(IDC_HAND),该函数返回的是本模块的一个鼠标资源,但是本模块中并不存在ID为IDC_HAND的资源,因此结果返回为空,LoadStandardCursor则是从标准库中加载资源,因此能够成功,为了达到同样的果,::LoadCursor(NULL, IDC_HAND)也可以加载成功,效果和前面的一样。

                通过这个问题,我发现,写程序真的需要细心,特别是一些常用函数,表面上看起来没什么问题,结果,往往就是这些看起来熟悉的东西最有问题;另外一点就是要坚持,有时候可能遇到一个问题,找了很多次都没找到答案,这个时候可能就会放弃,当然,你就永远找不到问题的答案!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值