![]() |
|
||||||||||||||
| | 网站首页 | 数据库教程 | web编程 | 服务器 | 程序设计 | | ||
|
||
|
|||||||
| WINDOWS下的动态鼠标光标控制 | |||||||
作者:佚名 文章来源:不详 点击数: 更新时间:2007-8-1 ![]() |
|||||||
|
鼠标光标资源的定义和调用 建立起自己的鼠标光标资源文件后,首先需要在应用程序的资源文件中定义鼠标光标。假设鼠标光标资源文件名为MOUSE.CUR和MOUSEM.CUR,在资源文件中的定义方法如下: imecurh CURSOR mouse.cur imecurm CURSOR mousem.cur 鼠标光标资源文件经定义之后,方可在应用程序中利用LoadCursor()函数调入内存使用,其调用方法如下: HCURSOR hCurh;//定义鼠标资源句柄 HCURSOR hCurm;//将鼠标光标数据调入内存 hCurh=LoadCursor(hInstance, imecurh");hCurh=LoadCursor(hInstance,"imecurm"); 动态鼠标光标的全局注方法 当鼠标光标移动到客户应用程序的窗口内时,鼠标光标立刻变成定制的形状。要实现这一功能,只需在注册客户应用程序窗口类时定义相应的鼠标光标资源即可。正常情况下客户应用程序鼠标句柄的定义方法如下: wc.Cursor=LoadCursor(NULL,IDC_ARROW); 要在窗口内将鼠标光标变成特定的形状,必须用下述方法定义光标句柄,然后注册窗口类: wc.hCursor = hCurh; 利用这种方法定制的全局性鼠标光标具有如下特点:只要鼠标光标移入该客户应用程序的窗口内,光标形状立刻变成定制的形状;鼠标光标移动平滑快速,无抖动等不良现象。 特定客户区域内的动态鼠标光标 很多应用程序具有在特定的客户区域内鼠标光标具有特定形状的功能,如UCWIN3.1的特殊符号软键盘:当鼠标光标移动到软键盘窗口内的按键位置时,光标形状为手形,当移动到非按键位置时,光标形状为上下左右四箭头形状;要实现这一动态鼠标光标功能,应按如下操作步骤编制: 首先将手形光标按上述方法设置为全局性的动态鼠标光标: wc.hCursor = hCurh; 然后注册相应窗口的窗口类,在该窗口函数中对WM_MOUSEMOVE消息进行如下处理: 1.获取鼠标光标的屏幕位置; 2.判断鼠标光标在特定区域内,则设置相应光标形状并设置标志; 3.判断鼠标光标移出特定位置则清除标志并恢复原来光标形状。 程序代码如下: POINT pt; RECT rt; BOOL iFlag; case WM_MOUSEMOVE: pt=MAKEPOINT(IParam);//光标位置 if(PtInRect(&rt,pt)){ //在特定区域设置鼠标光标 iFlaq=TRUE; setCursor(hCurm); } else if(iFlag==TRUE){ iFlag=FALSE; SetCursor(hCurh); } break; 上述特定客户区域内的动态鼠标光标虽然具有略微的抖动问题,但由于一般情况下的特定客户区域都比较小,所以这种现象也并不明显,完全可以满足客户程序的需要。如果客户程序存在多个特定区域需要不同形状的鼠标光标,只需建立多个用户光标源文件,并进行多个特定区域判断即可,有兴趣的读者可以自行扩充。
|
|||||||
| 文章录入:admin 责任编辑:admin | |||||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||||
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 网站地图 | 管理登录 | | |||
|