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,一起放在动态光标的前面,就可以了。
搞定了。