MFC更改鼠标光标

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MFC更改鼠标光标
用VC开发的Windows应用程序时,可以分四步对窗口上的鼠标光标进行定制,手工编辑Cursor、定义Cursor变量、加载Cursor变量、控制Cursor行为。

每个步骤的详细说明如下:
(1)手工编辑Cursor。

在资源编辑器里增加一个Cursor,VC会自动给它分配一个ID(比如:IDC_CURSOR1),然后手工编辑Cursor的形状,编辑好后保存一下。

你会看到Cursor的属性框中,有一个File name项里标明了该Cursor资源的文件路径(res\cursor1.cur)
(2)定义Cursor变量。

定义一个HCURSOR类型的变量myCursor,存放Cursor对象。

HCURSOR myCursor;
(3)加载Cursor变量。

在你需要改变鼠标光标的函数里添加Cursor的加载代码,将定义好的Cursor资源加载到前面的Cursor变量里,如果想程序一开始就自动显示个性化定制的鼠标光标,则在初始化函数(如:对话框初始化函数OnInitDialog)里加载Cursor。

VC加载Cursor的办法很多,可以用CWinApp::LoadCursor加载,也可以用Windows API中的LoadCursor加载。

但这两种办法都只能改变Cursor的形状,不能改变大小。

如果需要改变大小就只能用LoadImage,代码如下:
myCursor=(HCURSOR)LoadImage(NULL,"res/cursor1.cur",I MAGE_CURSOR,72,32 ,LR_LOADFROMFILE );
这是一个比较复杂的Windows API函数,有六个参数。

可以向内存中加载位图、ICON和Cursor。

函数原型如下
HANDLE LoadImage(
HINSTANCE hinst,
| LPCTSTR lpszName,
UINT uType,
int cxDesired,
int cyDesired,
UINT fuLoad );
下面只解释与加载Cursor相关的参数用法:
hinst:指向需加载该资源的module,(我还不太清楚module的确切函义,是一个程序,还是一个进程,还是一个库),不过一般可以将这个参数设为NUll。

lpszName:标识要加载的资源,如果fuLoad 设为LR_LOADFROMFILE,则该参数为资源的文件名,如位图文件、ICON文件,当然也包括Cursor文件。

uType:指明加载的资源类型,它的值可以是IMAGE_BITMAP. 加载位图;IMAGE_CURSOR. 加载cursor;IMAGE_ICON. 加载ICON。

cxDesired,光标的宽度,值是以像素为单位的整数。

cyDesired ,光标的长度,值是以像素为单位的整数。

fuLoad,资源加载的方式,当值为LR_LOADFROMFILE时,指从文件加载。

(4)控制Cursor行为。

最终控制Cursor的行为要通过OnSetCursor函数来实现。

用ClassWizard为你需要改变鼠标光标的窗口对象(CWin的子类),添加OnSetCursor函数来处理窗口的ON_WM_SETCURSOR消息。

程序运行时,只要鼠标进入到该窗口的区域,Windows就会给该窗口对象发送ON_WM_SETCURSOR消息,并触发你的OnSetCursor函数。

所以可以在OnSetCursor函数中增加控制鼠标光标的逻辑,如可以简单的显示你的个性化光标SetCursor(myCursor);也可以加入一些复杂的逻辑,比如在一定的区域内显示个性化光标,在其它区域显示标准光标,当然这就因实际需要而定了。

关于另外一个更改光标的重要问题:鼠标的hotspot,也就是鼠标的作用点问题,本人关于这个问题纠结了很久,始终无法找到更改HCURSOR作用点的函数。

后来终于在网上发现,其实在制作.cur格式的图片时就可以设置hotspot (热点)。

这样就解决了光标大,而作用点在光标的左上角问题!(PS 制作.cur 格式的图片可以用ArtCursor这个软件很好用)。

相关文档
最新文档