给你的应用程序添加动态鼠标
作者:魏镇江

下载本文示例源代码


本文程序运行效果图

鼠标是一个应用程序与用户交互的主要手段,因此如果在应用程序里能显示一些比较“酷”的鼠标的话,无疑能增加软件的人气值。但是我们一般情况下用VC++都只能调用系统提供的鼠标或生成一些静态的鼠标,怎么才能生成及利用动态鼠标呢?
幸好Visual C++已为我们准备好了一个很好的编辑动态鼠标的工具AniEdit,并且还提供了它的全部原代码。检索一下VC++安装盘的DevStudio/VC/Samples/SDK/SDKTOOLS目录,你就会发现它的。
你可以利用VC++生成一个Win32 Application,然后用Add Files to Project命令将所有原代码加入该项目,编译之后就可得到AniEdit。

当然,要自己制作动态鼠标的话,除了AniEdit之外,还需要另外一个工具ImagEdit。VC++也提供了它的全部原代码。它位于与AniEdit同样的目录下,请与AniEdit同样的方法编译并得到ImagEdit。

对于AniEdit的使用方法简述如下:程序启动后,左边是动态鼠标每帧的画面,右边上端可设置每帧的显示时间,下端是动态鼠标预览。
若你要改动某一帧的画面,先选中它,然后选择菜单Edit|Edit Frame...,于是启动了ImagEdit,对单帧画面进行编辑,改完之后保存退出。
若要增加一帧画面,可选择Edit|New Frame...,注意正确设置热点。
在使用AniEdit之前,你也可以先利用AniEdit打开Windows目录下的Globe.ani文件,大致了解一下是怎么回事?

那么有了动态鼠标文件之后,又怎么在VC++中调用呢?通过以下几行简单的代码就可以轻松利用动态鼠标。
首先在类中增加成员变量m_hAniCursor,然后在构造函数中赋空值,

void CSampleView::CSampleView()
{
m_hAniCursor = NULL;
}

再利用LoadCursorFromFile()载入动态鼠标文件:

void CSampleView::OnInitialUpdate()
{//推荐在OnInitialUpdate或OnInitialDialog
//中载入动态鼠标文件
...
if(m_hAniCursor == NULL)
m_hAniCursor = LoadCursorFromFile("d://path//sample.ani");
...
}

然后在需要改变鼠标的地方调用SetCursor()。推荐截取WM_SETCURSOR消息,然后修改OnSetCursor()函数。

BOOL CAboutDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if(m_hAniCursor!=NULL)
SetCursor(m_hAniCursor);
/*or
if(m_hAniCursor!=NULL)
SetClassLong(GetSafeHwnd(), GCL_HCURSOR, (LONG)m_hAniCursor);*/
return TRUE;
//return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

再编译程序并运行,你就可以得到一双你梦寐以求的闪动的大眼睛或一只翩翩起舞的蝴蝶,是不是很酷?

给你的应用程序添加动态鼠标相关推荐

  1. 将应用程序添加到鼠标右键发送到

    步骤: 1.首先将需要添加到鼠标右键发送到的程序,创建一个快捷方式 2.win+R 打开运行,输入sendto 3.将快捷方式拷贝至sendto的目录下,(windows10操作系统,在 C:\Use ...

  2. 为你的应用程序添加动态Java代码

    原来一直以为,JAVA程序都必须在执行前被编译,而不是在运行时可以动态加载,看了这篇文章后,才知道这么一回事,看来JAVA里面的东西没有熟悉还有的是,不要以人好像什么都懂都了. 作者:Amydeng; ...

  3. 将应用程序添加到鼠标右键

    将软件固定到鼠标右键 win + r 输入regedit进入注册表: 进入: 计算机\HKEY_CLASSES_ROOT*\shell 参考:notopad++: 双击默认

  4. linux 程序、动态库、静态库内部添加版本号和编译时间

    2019独角兽企业重金招聘Python工程师标准>>> 给程序和库添加版本号和库,有利于维护和升级. 当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2 ...

  5. linux中查询动态库版本的命令,linux 程序、动态库、静态库内部添加版本号和编译时间详解...

    给程序和库添加版本号和库,有利于维护和升级. 当然你可以在文件名上体现,比如有个程序叫 yun,文件名写为 yun_1.0.2,但这个需要每次手动维护,而且不能100%确保当前程序就是那个版本.所以, ...

  6. 在微信小程序中动态的添加类名

    在微信小程序中动态的添加类名 <view data-num="1" class="takeTaxi {{_num == 1 ? 'active' : ''}}&qu ...

  7. Qt Creator添加动态dynamics

    Qt Creator添加动态 添加动态 制作动画 添加连接 加States 添加动态 您可以为UI组件的属性设置动画,并在它们之间创建连接以使它们能够相互通信. 制作动画 您可以在"时间轴& ...

  8. 如何给视频添加动态文字水印?

    如何给视频添加动态文字水印?添加水印是视频制作环节中最后的一个步骤,视频添加水印可以有效防止视频被盗用,还能有效保护自己的版权.有时候我们希望给视频添加动态的文字水印,比例文字水印在视频中上下或者左右 ...

  9. 给你的Flex程序添加深链接和分析-其实比你想象的要简单

    Adobe Flash Builder 4 简体中文正式版 Windows版点击下载:http://g.csdn.net/5134151 Adobe Flash Builder 4 简体中文正式版 M ...

最新文章

  1. 前端CSS预处理器Sass
  2. D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)
  3. 关于jquery调用webservice的一些感想
  4. 创建springboot多模块项目
  5. VTK:可视化算法之HeadBone
  6. .NET 6 中的 Logging Source Generator
  7. Kinect1和Kinect2的区别
  8. mp3 播放自动 html5,HTML5打造简易播放器:Chrome运行.mp3
  9. 一文读懂数据挖掘建模预测
  10. GDI 总结三: CImage类使用
  11. 基于Android的计算器app设计
  12. minus的用法简介
  13. Z05 - 004、网站流量多维度细分(流量分析)
  14. 微信公众号分享配置无效。。分享出来的只是纯链接了,如何自定义微信公众号的分享
  15. go语言map底层数据结构
  16. STM32F103C8T6基于Arduino框架下利用定时器跑RBG灯闪烁
  17. 【视频转gif】视频文件转成 .gif,在线且免费
  18. numpy序列预处理dna序列_使用机器学习和Python揭开DNA测序神秘面纱
  19. A Man Called Ove
  20. MapReduce优化----Shuffle过程剖析及性能优化

热门文章

  1. Android power_supply驱动开发详解
  2. Python游戏之Pygame——太空飞机大战(三)
  3. LVDS,LVTTL,LVCOMS等常见电平标准
  4. 万字干货:当了5次韭菜总结出来的抖音运营指南
  5. windows10应用商店打不开
  6. 【LeetCode】55. 跳跃游戏 (JavaScript)
  7. vulkan同步机制之——Fence Barriers
  8. 分享上海seo统计的seo基础知识
  9. nacos问题: Load balancer does not have available server for client:xxx解决办法
  10. DDN区块链节点升级公告