1: 修改方法一

重载CView里的OnMouseMove函数 .

重载方法 :

“View” -> “ClassWizard” (Ctrl + W) -> 右侧Messages栏选择”WM_MOUSEMOVE” , 然后点”Add Function” , 点”OK” .

添加代码 :

在 CDocTestView::OnMouseMove()里添加如下代码:

HCURSOR hCur  =  LoadCursor( NULL  , IDC_CROSS ) ;//

::SetCursor(hCur);

机制分析:

系统默认每次调用OnMouseMove函数 ,都会重新用程序默认自带的光标来重新绘制光标 ,所以 ,需要在OnMouseMove里来进行光标的修改才有效 。

2: 修改方法二

重载CView里的OnSetCursor函数 .

重载方法:

“View” -> “ClassWizard” (Ctrl + W) -> 右侧Messages栏选择”WM_SETCURSOR” , 然后点”Add Function” , 点”OK” .

添加代码 :

修改OnSetCursor 为如下代码:

BOOL CDocTestView:: OnSetCursor ()

{

HCURSOR hCur  =  LoadCursor( NULL  , IDC_CROSS ) ;

::SetCursor(hCur);

return TRUE;

}

机制分析:

系统在设置光标时 ,会发送一个WM_SETCURSOR消息 ,此消息会触发OnSetCursor函数 , 所以 ,可以在这个函数里添加修改光标的代码 。

3:修改方法三

重载CView里的PreCreateWindow函数 .

重载方法 :

“View” -> “ClassWizard” (Ctrl + W) -> 右侧Messages栏选择” PreCreateWindow” , 然后点”Add Function” , 点”OK” .

添加代码 :

在CDocTestView::PreCreateWindow函数里添加如下代码:

cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW,

LoadCursor( NULL  , IDC_CROSS ) ,

(HBRUSH) (COLOR_WINDOW + 1));

机制分析:
     
      缺省窗口创建时 , 会以一个结构体WNDCLASS来描述窗体的属性 ,并利用注册机制 ,将此窗口属性注册到系统中 ,利用AfxRegisterWndClass可以改变窗体本身的属性 ,并对它重新注册 。

4:修改方法四

任意函数中修改鼠标形状

理论上利用SetCursor(…)函数 , 应该可以在任何时候,任何地方修改鼠标形状 ,但实际情况却并非如此 , 每次调用OnMouseMove时候(即每次鼠标移动时) , 系统会调用程序默认原来的一个光标来重新绘制鼠标形状 . 所以 , 你如果在其它地方修改光标 , 你会发现这根本不起作用 , 因为每次鼠标一移动 , 它又恢复到原来的形状了 . 这里需要用到另一个API来实现这个功能
SetClassLong() .  .  .

你可以在任何地方调用下面的代码来修改光标形状:

SetClassLong(this->GetSafeHwnd(),

GCL_HCURSOR ,

(LONG)LoadCursor(NULL , IDC_CROSS));

综合比较:

方法三更加适合于一次性的将默认光标统一替换另一种 ,并不适合于多次频繁替换。

方法一 ,方法二 ,可以实现光标的多次变换 ,但是都需要在函数中添加额外的变量来控制显示为不同的光标 。

方法四是最灵活的一种方式 ,可以在任何时候 ,任何函数里更换鼠标形状 。

附   录

1: LoadStandardCursor使用方法 .

LoadStandardCursor用来载入系统自带的光标 , 调用方式如下:

HCURSOR hCursor = (HCURSOR)AfxGetApp()->LoadStandardCursor(IDC_CROSS);

::SetCursor(hCursor);

2: LoadCursor 使用方法

HCURSOR LoadCursor(HINSTANCE hInstance ,        // handle to application instance

LPCTSTR   lpCursorName); // name or resource identifier

lpCursorName指的是光标的名字 .

hInstance描述的是含有光标的模块句柄 . 这个模块可以是一个可执行文件 , 也可以为空 . 当模块句柄指向一个文件时 , LoadCursor则从这个文件中获取光标 . 当模块句柄为空时 , LoadCursor则从系统中获取光标 .

所以如果你想载入系统自带的光标 , 可以用下面的代码:

HCURSOR hCur  =  LoadCursor( NULL  , IDC_CROSS ) ;

::SetCursor(hCur);

如果想载入资源中自己绘制的光标 , 可以用下面的代码:

HCURSOR hCur  =  LoadCursor(AfxGetInstanceHandle() ,

MAKEINTRESOURCE(IDC_CURSOR1));

::SetCursor(hCur);

LoadCursor 加载不同的鼠标光标相关推荐

  1. jquery瀑布流布局和鼠标滚动加载

    jquery部分: //引入JQ库(版本不同会有差别) <script src="https://cdn.bootcss.com.jquery/2.1.1/jquery.min.js& ...

  2. 从资源中加载特殊资源方法

    在资源中保存了GIF,PNG,ANI等等资源时怎样加载呢? 可以使用如下方法 加载动态图标(光标)的方法 注意再将光标导入到资源时候资源类型输入ANI //  在一般mfc程序中使用 // HINST ...

  3. SAP UI5 应用 XML 视图的加载逻辑分析

    任务:分析 SAP UI5 root XML 视图的加载逻辑. 鼠标放到 initiator 这一列上,找到调用栈的 UIComponent.js 的 createContent 方法: 可以看到,这 ...

  4. el-carousel加载缓慢

    vue3.0+vite+ts使用el-carousel 实现轮播图场景,自动切换 首次加载缓慢,鼠标点击向左或者向右箭头才会显示图片,否则只显示下边的指示器.代码如下: <div >< ...

  5. html加载图片有超时时间吗,[前端]图片预加载方法

    目录 1. 使用jQuery图片预加载(延迟加载)插件Lazy Load Lazy Load也叫惰性加载,延迟加载,顾名思义,就是在图片未到达可视区域时,不加载图片,我们常常在很多的优秀网站上看到类似 ...

  6. mysql中鼠标光标消失了_为什么我这里没有显示鼠标的悬停可改变页面颜色,以为什么我加载了mysql的jar文件还是不能显示报表的内容呢?...

    源自:3-6 JSP页面实现 为什么我这里没有显示鼠标的悬停可改变页面颜色,以为什么我加载了mysql的jar文件还是不能显示报表的内容呢? 首先是index.jsp pageEncoding=&qu ...

  7. Visual C++——加载自定义光标

    基本概念 自定义光标:自定义光标保存在扩展名为.cur的文件中 光标名 CURSOR 光标文件(.cur) 采用自定义光标时,需在资源文件中定义光标资源. API LoadCursor:第一个参数是要 ...

  8. 模块化妙用!用vue3实现一个鼠标追踪器和异步加载组件

    用vue3实现一个鼠标追踪器和异步加载组件 一.

  9. Qt 中实现在控件中点击鼠标,就在鼠标点击处加载图片的方法

    首先应该知道,QLabel类是没有点击事件的.我们需要点击鼠标,那么必须重写一个QLabel类去继承原来的QLabel.比如说我定义PutPicLabel来继承QLabel. 在头文件中应该这么写: ...

最新文章

  1. 四肢切割_四肢瘫痪者用大脑信号和先进的假肢完成吃饭动作
  2. cocoapods管理第三方框架
  3. QPixmap: It is not safe to use pixmaps outside the GUI thread原因
  4. Python爬虫基础面试题为2020年初大学生就业做准备(文末附教程)
  5. 【Unity3D与23种设计模式】模板方法模式(Template Method)
  6. 发布在IIS的网站,可以用本机IP登录访问,用localhost不可登录访问
  7. SpringSecurity - 基础篇
  8. 如何获得select被选中option的value和text
  9. 20个优秀的前端css框架
  10. 接口做的好怎么形容_匠品美缝知识之接口美缝如何做?
  11. 这次要说不明白 immutable 类,我就怎么地!
  12. Mac 下 maven 安装与配置
  13. 云初起微方案中下单人、联系人、下载者三者之间是什么关系?
  14. 如何去除Html中超链接默认下划线
  15. PowerVR性能建议-黄金法则
  16. matinee和matin区别_法语小灶 | an和année, jour和journée有什么区别?
  17. 谷歌离线版下载及vs中添加谷歌浏览器(启动项目用谷歌浏览)
  18. Hfut | 集电竞赛指南
  19. MATLAB R2021a 绘图函数fplot 使用详解
  20. DFC Session Management Srinivas Jakkula

热门文章

  1. pythonmax对字符_(MAX第五篇)Python--字符串操作(三)
  2. 华为RH2288V3服务器部署指南
  3. GeoHash -------寻找附近人
  4. 原型、原型对象、构造函数、原型链理解
  5. TensorFlow学习入门
  6. php excel 读取日期问题
  7. javax.servlet.http.httpServletRequest接口
  8. linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录
  9. “多态枚举”数值如何判断?
  10. 第十次ScrumMeeting博客