用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",IMAGE_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);也可以加入一些复杂的逻辑,比如在一定的区域内显示个性化光标,在其它区域显示标准光标,当然这就因实际需要而定了。

 

posted on 2010-12-12 09:42  kangwang1988  阅读(2539)  评论(0编辑  收藏  举报