LoadCursor 加载不同的鼠标光标

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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值