设置鼠标光标的手型

VC++ 6.0 设定光标可以使用SetCursor(HCURSOR hCursor)来设定,如果是新手,建议在WM_SETCURSOR消息响应函数中设置,你可以在别的地方设置,但是需要自己控制光标的变化。

       1、使用系统预定义的光标:

       使用ClassWizard为视图或者对话框添加WM_SETCURSOR消息的响应函数OnSetCursor();在函数中,使用SetCursor函数,然后要返回真,屏蔽掉系统的设置函数。

BOOL CMyProgramView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
 // TODO: Add your message handler code here and/or call default
 
             SetCursor(LoadCursor(NULL,IDC_ARROW)); //设定光标为箭头,就是我们平时用的。

             return TRUE;

            return CView::OnSetCursor(pWnd, nHitTest, message);
}

LoadCursor第一个参数是要载入光标的程序的实例,当使用系统预定义光标的时候,要设置为空。当要使用自定义光标的时候,设置为AfxGetInstanceHandle(),使用自定义的光标,在第2点中讲。

更换LoadCursor中的第二个参数,就能得到不同的系统预定义光标。

IDC_APPSTARTING 标准的箭头和小沙漏

IDC_ARROW 标准的箭头

IDC_CROSS 十字光标

IDC_HELP 标准的箭头和问号

IDC_IBEAM 工字光标

IDC_NO 禁止圈

IDC_SIZEALL 四向箭头指向东、西、南、北

IDC_SIZENESW 双箭头指向东北和西南

IDC_SIZENS 双箭头指向南北

IDC_SIZENWSE 双箭头指向西北和东南

IDC_SIZEWE 双箭头指向东西

IDC_UPARROW 垂直箭头

IDC_WAIT 沙漏

         2、使用自定义光标:

         首先在资源中添加一个光标,和你添加对话框是一样的,然后画图。系统默认是黑白色彩的光标,可以修改为彩色的光标。修改方法为:

         点击NewDevieImage工具条:

         

        然后点击Custom,设置颜色为256色。

         

        点击OK。

         自己画好光标后,就可以把画好的光标设置为系统使用的光标了:

          方法还是再OnSetCursor函数中使用SetCursor函数,只是LoadCursor的参数不一样:

    

BOOL CMyProgramView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) 
{
 // TODO: Add your message handler code here and/or call default
 
            SetCursor(LoadCursor(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDC_MYCURSOR)));
             return TRUE;

            return CView::OnSetCursor(pWnd, nHitTest, message);
}

       LoadCursor第一个参数要为当前应用程序的实例,使用AfxGetInstanceHandle()得到,第二个参数为刚才新建的光标的ID。这样,程序的光标就设定为你需要的了。

 

3、如何动态更换光标:

      很多时候需要动态的更换光标,这里建议是自己定义一些标志,然后在OnSetCursor中判断标志,当标志为一个值的时候,设定什么光标。

4、什么时候系统会发送设置光标消息:WM_SETCURSOR。

      原文的定义是这样:The WM_SETCURSOR message is sent to a window if the mouse causes the cursor to move within a window and mouse input is not captured。

      只要鼠标事件发生就会自动发送 WM_SETCURSOR从而触发OnSetCursor。你可以再鼠标按下的函数中使用SetCursor来设置一个光标,你会发现光标确实改变了。但是只要你移动鼠标,或者放开鼠标,光标就变回去了。

 

 

 

 

 

windows程序中,在窗口类的定义中,WNDCLASS结构体的一个成员

wndcls.hCursor

可以选择不同的鼠标,总结如下:

1.系统光标。

加载系统光标比较简单.

wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);//加载标准的系统光标

 

注意第一个参数必须为NULL,第二个参数可以有不同的选择,更多的参数,查找msdn

 

2.自定义静态光标

自定义静态光标的加载有两种方式:

第一种方式:

使用LoadCursorFromFile函数,

该函数允许你直接从文件中加载,而不必要导入资源.

wndcls.hCursor=LoadCursorFromFile("F:\\windows 鼠标\\静态光标.cur");

 

注意,由于程序调用的时候,会从固定的路径去加载光标,因此要保证每次运行的时候,该光标存在.

 

第二种方法:

ctrl+r 导入资源,选择选择一个你自定义的名字,mycur,导入资源后点击保存,将文件保存为mycur.rc文件,

然后导入该资源文件,系统会自动生成resource.h,导入头文件,在cpp文件前包含头文件#include "resource.h"

wndcls.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDC_CURSOR1));

这个IDC_CURSOR1是默认的光标资源ID,你也可以改变这个ID名

 

3.自定义动态光标

有两种方法:

第一种方法:

直接从文件中加载:

wndcls.hCursor=LoadCursorFromFile("F:\\windows 鼠标\\qq\\1852.ani");

1852.ani是我的动态光标.

第二种方法.

先导入资源,导入资源的时候,会弹出一个对话框,要求输入名字类型,顺便输入一个anicur

然后导入,

找到资源文件,就是.rc文件,右键编辑,查找

IDR_ANICUR1  将所在的一行修改如下.

IDR_ANICUR1             CURSOR  DISCARDABLE     "1852.ani"

其实就是将anicur修改为CURSOR。

然后

wndcls.hCursor=LoadCursor(hInstance,MAKEINTRESOURCE(IDR_ANICUR1));

 

 

4.怎样加载ico图标.

加载自定义的ico图标,首先导入资源IDI_ICON1,然后使用函数

 wndcls.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_ICON1));

这时有一点需要注意,有可能造成先前设置的动态鼠标不能用,这时候需要手工编辑rc资源,将IDI_ICON1所在的行,以及其下一行#endif,一起放在动态光标的前面,就可以了。

 

搞定了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值