转载:http://hi.baidu.com/conglingks/blog/item/afb63c2da954df31359bf710.html

消息下:

SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));

或是:

HCURSOR   hc;

hc=LoadCursor(NULL,IDC_CROSS);

SetCursor(hc);

IDC_APPSTARTING     带小沙漏的标准箭头  
IDC_ARROW           标准箭头  
IDC_CROSS           十字光标  
IDC_HAND            windows   2000:手型  
IDC_HELP            带问号的箭头  
IDC_IBEAM           i型标  
IDC_ICON            obsolete   for   applications   marked   version   4.0   or   later.    
IDC_NO              禁止符号  
IDC_SIZE            obsolete   for   applications   marked   version   4.0   or   later.   use   idc_sizeall.    
IDC_SIZEALL         十字箭头  
IDC_SIZENESW        指向东北和西南的双向箭头  
IDC_SIZENS          指向南和北的双向箭头  
IDC_SIZENWSE        指向西北和东南的双向箭头  
IDC_SIZEWE          指向东西的双向箭头  
IDC_UPARROW         上箭头  
IDC_WAIT            沙漏

当我们要自己选择一个图标的时候按照以下几个步骤:

1、定义一个成员变量: HCURSOR m_cursor;

m_cursor = AfxGetApp()->LoadCursor(IDC_CURSOR1);

也可以

m_cursor = LoadCursorFromFile(".//res//123.cur");

2、重载 OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)函数,

3、在函数里面写入:

::SetCursor(m_cursor);

OK,我们自定义的鼠标完成;

当然我们也可以用ani格式的动态鼠标形状,可以使程序更帅;

和载入.cur一样:例如;

m_cursor = LoadCursorFromFile(".//res//123.ani");

-----------------------------------------------------------------------------------------------------------

当然也可以先把文件加载进来直接导入:按照以下步骤:

1、先把ani文件导入;

2、随便保存成什么名字;然后在程序的.rc文件下,把对应的代码 修改成以下代码:

IDR_FLY                 ANICURSOR DISCARDABLE   "fly.ani"

或者

IDR_FLY                 CURSOR DISCARDABLE   "fly.ani"

不然有的时候可能出现错误,我现在也没有搞清楚是什么问题;

或者直接在.rc文件下添加代码:

IDR_FLY                 ANICURSOR DISCARDABLE   "fly.ani"

或者

IDR_FLY                 CURSOR DISCARDABLE   "fly.ani"

就不用第一步骤了;然后

m_cursor = AfxGetApp()->LoadCursor("IDR_FLY");

这样就可以实现了;

ani格式我们可以通过一些动画或gif格式转换过来;

下面一些理论的东西可能对我们也有用,是转自其他人的博客的内容:

转粘(vckbase):

windows编程中有两种方法改变指针:一种是当应用的主窗口类注册时,为wndclass结构提供一个全程光标指针,另外一种方法是在程序中处理wm_setcursor消息来设置鼠标光标。标准的mfc应用程序使用第一种方法自动在主窗口注册时将光标指针设置为一个箭头。如果要改变光标指针,则可以通过在主窗口或子窗口中重载消息wm_setcursor的处理函数来重新设置鼠标指针。

// handle wm_setcursor in button class
bool cmybutton::onsetcursor(cwnd* pwnd, uint nhittest, uint msg)
{
::setcursor(m_hmycursor);
return true;
}

当用户将鼠标指针移到按钮上时,鼠标不被捕获,windows发送一个wm_setcursor消息到按钮。从上面onsetcursor的代码中可以看到,它传递一个参数是窗口句柄- 即鼠标指针所指的窗口,这里指的是按钮本身;onsetcursor传递的第二个参数是nhittest,这是一个鼠标点击测试代码,它以htxxx开头,用于wm_nchittest消息;onsetcursor传递的第三个参数是触发事件的鼠标消息的消息id-例如,wm_mousemove。wm_setcursor是专门用来设置鼠标指针的消息,当设置了鼠标指针以后,应该让它返回true以防止windows再作缺省处理。

wm_setcursor的处理机制是这样的,如果有父窗口的话,缺省的窗口过程首先发送wm_setcursor消息到父窗口,如果父窗口处理wm_setcursor消息,则windows不再作任何多余的事情,处理完消息便结束。如果父窗口不处理wm_setcursor消息,windows让子窗口来处理wm_setcursor,如果子窗口也不做任何处理,windows使用全程光标指针,如果没有全程光标指针,则使用箭头指针。

如果你在程序中要是使用动态光标指针,你必须决定是在子窗口处理wm_setcursor消息还是在父窗口中处理wm_setcursor消息。两种方法各有利弊,根据具体情况而定。一般总是让对象决定它们自己的行为属性-也就是说最好在子窗口中做处理。本文中的子窗口即按钮。这就要派生一个新的按钮类,新的按钮类有自己的消息映射及其消息处理过程。可以使用类向导来产生新的按钮类,但那样要做的事情太多。如果你已经有自己的按钮类,那当然是在自己的按钮类中处理wm_setcursor消息。如果没有自己的按钮类而又想偷懒的话,那就在对话框中处理wm_setcursor消息得啦,只是不要向面向对象专家说是我告诉你这么做的。

本文附带一个简单的基于对话框的程序,mycursor,这个例子程序示范了两种方法来改变光标指针。如果将鼠标移到按钮上,光标指针变为蓝色手指,它是通过在对话框中处理onsetcursor实现的,另外,如果将鼠标指针移到带下划线的超链接上,光标指针又变为另外一个windows中常常使用的手指。它是通过在窗口子类中实现的。cstaticlink是一个通用的可重用类,在vc知识库的范例程序中经常用到,其中cstaticlink::onsetcursor的大多数代码处理是从win32hlp.exe可执行程序中吸取手型指针,它们与本文有关光标设置的内容关系不大.

vc下动态改变鼠标光标相关推荐

  1. 如何在VC++下动态调整水晶报表图片的大小

    我用的是VS2005中的内嵌水晶报表,在采用拉模式下,我们可以将数据库中的大字段(Access是ole,Oracle是blob,SQL Server是image)直接拉至水晶报表相应位置并显示出来.但 ...

  2. 【转】如何在VC++下动态调整水晶报表图片的大小

    本文转自:http://blog.csdn.net/memory_xj/archive/2008/04/24/2322071.aspx ,原作者:青蛙王子 我用的是VS2005中的内嵌水晶报表,在采用 ...

  3. Windows10黑色背景下看不清鼠标光标问题的解决

    最近在开发的过程中遇到一个让人非常心烦的问题,打开的黑色的界面,会莫名其妙的找不到鼠标的光标,这让定位到代码的某一行非常困难,眼神不好的话直接就是瞎点.没办法,做为一个程序员实现是忍受不了这种事情(至 ...

  4. unity动态更换鼠标光标

    鼠标贴图资源导入到unity,设置类型为Cursor 代码 Cursor.SetCursor( Texture2D, Vector2, CursorMode); 参数说明 一,Texture2D:光标 ...

  5. js动态改变下拉菜单内容示例 .

    <HTML><HEAD><TITLE>动态改变下拉菜单内容示例</TITLE></HEAD><SCRIPT LANGUAGE=java ...

  6. vue 模拟随机变速的动态打字特效【支持多行文本】(含css实现闪烁光标,js动态改变setInterval定时器的时间间隔)

    随机变速的动态打字特效–最终效果 随机变速的动态打字特效–完整代码 <template><div class="contentBox"><span&g ...

  7. Ubuntu下使用Tobii Eye Tracker 4C眼动仪控制鼠标光标

    之前成功在 Ubuntu 下使用了 4C 眼动仪,但是不知道什么原因目前无法使用 TobiiProEyeTrackerManager 软件来进行眼动仪的标定,也就无法使用它的 gaze visuali ...

  8. VC下加载多种格式图片的方法总结

    From: http://www.cnblogs.com/Daywei/archive/2011/03/19/1988848.html 尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元 ...

  9. VC++下的OpenGL编程

    1.值得记住的约定 一般情况下,VC++下进行OpenGL应用程序开发步骤如下: 1.通过PIXELFORMATDESCRIPTOR结构设置备注描述表DC的像素格式属性. 2.创建渲染描述表RC,并与 ...

  10. 在VC中动态加载ODBC的方法

    在VC中动态加载ODBC的方法     在使用VC.VB.Delphi等高级语言编写数据库应用程序时,往往需要用户自己在控制面板中配置ODBC数据源.对于一般用户而言,配置ODBC数据源可能是一件比较 ...

最新文章

  1. Java 8 - Lambda从兴趣盎然到索然无味
  2. 判断一个字符串是否是数值
  3. 王爽汇编习题 : 给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为 ___ 到 ____。
  4. 【渝粤教育】国家开放大学2019年春季 289法理学 参考试题
  5. 6大设计原则之迪米特法则
  6. 数据结构(十二)动态规划
  7. Ubuntu 下使用SSH 代理
  8. 如何让Java应用在Aone上打包速度提高100%以上
  9. 注释可以出现在c语言任何位置,在c程序中,注释语句只能位于一条语句的后面吗...
  10. 测试用例(等价类划分法)
  11. keil4找不到c语言头文件路径,keil4中头文件路径设置的方法汇总
  12. Codeforces Round #741 (Div. 2) A. The Miracle and the Sleeper
  13. 介词短语不能做宾语,但有时有的借此有句意省略就出现了介词再加上介词短语了
  14. linux gre配置,Linux设置gre 隧道
  15. 88 Three.js 导入FBX格式骨骼绑定模型
  16. lwip的tcp断线重连例程_STM32F107+LWIP---如何检查tcp通讯断开?并重新连接
  17. Java实现 蓝桥杯 算法提高 奥运会开幕式
  18. Chisel入门------Chisel的基本语法4
  19. 基于多核处理器的RTOS多核扩展分析与研究
  20. Windows7优化开机速度的方法只需一步设置

热门文章

  1. R 保存包含中文的 eps 图片--showtext
  2. Servlet连接数据库
  3. MySql中的count函数
  4. HCIE-Security Day2:防火墙安全区域、安全级别的理解
  5. shell第四次练习
  6. 如何在非 React 项目中使用 Redux
  7. 【离散数学2】代数系统趣题
  8. ZZULIOJ 1917: E
  9. CentOS 修改默认语言
  10. Java判断文件编码格式