响应了WM_SetCursor消息,这时, 改变鼠标形状的代码必须在这个消息里处理,在其他地方使用SetCursor已经不起作用了。

这个消息处理函数包含三个参数:

afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );

pWnd 是消息处理者的窗口,一般NULL  表示当前对话框

nHitTest 鼠标处于窗口的哪一部分

我们可以使用pWnd->GetDlgCtrlID() 来获得当前鼠标所在位置的控件ID

比如,我们要想每个控件上的鼠标形状都不一样 ,怎么写呢? 可以用如下方式实现:

BOOL CShowImageDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{switch (pWnd->GetDlgCtrlID()){case IDC_MOVE:SetCursor(LoadCursor(NULL,IDC_HAND));break;case IDC_CSTATIC_PICTURE:SetCursor((HCURSOR)::LoadImage(NULL,"res//XiangPi.ico",IMAGE_ICON,20,20,LR_LOADFROMFILE));break;......Default:SetCursor(LoadCursor(NULL,IDC_ARROW));break;}return CDialog::OnSetCursor(pWnd, nHitTest, message);
}

需注意的是:  CStaic控件的属性Notify 必须要设置为TRUE 才能使得 当鼠标在 CStatic上时改变形状。

但是,当CStatic的属性Notify设置为TRUE时,其父窗口也就是包含这个控件的对话框就不能响应鼠标消息了,比如:不能响应左键按下消息 鼠标移动消息等。

有没有办法,既能使得光标可以改变形状,又能响应鼠标消息呢?

网上查时,很多人都说自己写一个继承自CStaic的类,在新类中处理鼠标消息,但是我只想修改鼠标形状,却还要再写个类,实在是有些麻烦。

有好的办法? 有。

方法是: 利用::GetCursorPos(pointPos);  获得光标所在的位置,然后判断光标是否在控件内

BOOL CShowImageDlg::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CPoint pos;::GetCursorPos(&pos);if(m_erase){if(m_bControlUnit){m_image.ScreenToClient(&pos);if (m_unitTracker.HitTest(pos)>=0) // 橡皮筋类{SetCursor((HCURSOR)::LoadImage(NULL,"res//XiangPi.ico",IMAGE_ICON,20,20,LR_LOADFROMFILE));return TRUE;}}else{m_image.ScreenToClient(&pos);if (m_RectTracker.HitTest(pos)>=0){SetCursor((HCURSOR)::LoadImage(NULL,"res//XiangPi.ico",IMAGE_ICON,20,20,LR_LOADFROMFILE));return TRUE;}}}
}

2022年补充:

长期改变鼠标形状:

SetClassLongPtr(GetSafeHwnd(), GCLP_HCURSOR,  (LONG)LoadCursor(NULL, IDC_WAIT));
SetCursor如果应用程序必须在窗口中设置光标,必须确保指定窗口类的类光标被设为NULL,如果类光标不是NULL,则每次移动鼠标时,系统都要恢复类光标
 ::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_HAND)));::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)));::SetCursor(::LoadCursor(NULL, MAKEINTRESOURCE(IDC_IBEAM)));

参考资料:

如流,新一代智能工作平台

http://topic.csdn.net/u/20080224/17/2b244ad8-3bf0-4481-83e4-030a415788fc.html

http://topic.csdn.net/u/20100519/17/3ee4c6a0-0f69-4334-8f34-c7db04066bc7.html

如流,新一代智能工作平台

http://topic.csdn.net/t/20030729/21/2086728.html

http://topic.csdn.net/u/20080208/13/17159a0a-7400-4f26-9e57-3aa81b0847d4.html

响应了WM_SetCursor消息,如何改变鼠标形状相关推荐

  1. Qt如何改变鼠标形状

    一.利用Qt自带的资源修改鼠标形状 1.确定坐标范围,在坐标(0 ~ width,0 ~ height)范围内改变鼠标形状 QPoint mousepos = e->pos(); int wid ...

  2. html中怎么改变鼠标形状,css鼠标样式语法及20种可选值(属性)

    我们对Windows各种各样的鼠标样式都不陌生,当鼠标移动到不同的地方时,当鼠标执行不同的功能时,当系统处于不同的状态时,都会使鼠标的形状发生变化.而在网页上往往只有当鼠标在超级链接上时才出现一个手形 ...

  3. Java之Cursor改变鼠标形状

    将鼠标设置成手掌形状 import javax.swing.JFrame; import java.awt.Cursor; public class uu {static Cursor cursor= ...

  4. 前端鼠标形状设置--cursor

    前端鼠标形状设置–cursor 前端鼠标形状设置,可以通过设置cursor属性来修改. 在Vue项目中,改变鼠标形状设置:在index.html中写入下面的代码即可. body{ cursor: ur ...

  5. CSS/HTML改变鼠标指针形状方法 属性说明

    改变鼠标指针形状的方法有两种:第一种:用的来改变鼠标指针形状.另一种是:利用第三方控件的方法,而我自己最常用的是第一种:用css样式表来改变鼠标指针形状 我们先来看第一种:用来改变鼠标指针形状. 有些 ...

  6. 改变鼠标指针形状两种方法及实例

    改变鼠标指针形状的方法有两种:一种:用css样式表来改变鼠标指针形状.另一种是:利用第三方控件的方法,而我自己最常用的是第一种:用css样式表来改变鼠标指针形状 我们先来看第一种:用css样式表来改变 ...

  7. CSS/HTML 改变鼠标指针形状

    https://www.cnblogs.com/hanqishihu/p/5805566.html CSS/HTML 改变鼠标指针形状 改变鼠标指针形状的方法有两种:第一种:用的来改变鼠标指针形状.另 ...

  8. tkinter 菜单添加事件_Python+tkinter设置Label字体、字号、样式、对齐方式、鼠标形状、响应鼠标事件...

    推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书详情:配套资源:用书 ...

  9. Python+tkinter设置Label字体、字号、样式、对齐方式、鼠标形状、响应鼠标事件

    推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书详情: 配套资源:用 ...

最新文章

  1. python简单代码 春节集五福-集五福活动又来了,不过这个价值几十亿的大项目也别错过...
  2. jqgrid 列表条件查询的几步关键操作
  3. bzoj 1797: [Ahoi2009]Mincut 最小割 (网络流)
  4. Andropid 系统(273)--如何修改google libphonenumber的meta data (号码归属地,紧急号码列表,号码格式,号码范围)
  5. 这家厂商正式宣布退出手机市场:将加强汽车零部件业务
  6. golang 使用openoffice 生成pdf_使用golang生成PDF文件
  7. 通过一个简单例子看懂遗传算法,附MATLAB代码
  8. 如何训练结构化思维能力?它是一种工作方法还是思维方式?
  9. 悉尼大学理学院计算机科学,悉尼大学理学院本科申请
  10. 研发里那只看不见的手,勒的很疼
  11. 儿子跟妈妈关系不好怎么办?这里有解决办法!
  12. 智能化LED照明技术的最新发展
  13. android phone电脑驱动下载,全机型Android Phone驱动及安装教程(XP,Vista,Win7).pdf
  14. gvim for verilog简易配置
  15. Mac Docker入门安装使用
  16. 关于bios中设置upan启动
  17. 基于canvas制作绚丽的倒计时效果
  18. 说话做事要有结构性思维
  19. Win7系统的笔记本u盘数据如何恢复
  20. Windows XP系统瘦身优化加速

热门文章

  1. 利用飞狐交易师,通达信打造自己的交易系统 第二节 怎么获得通达信的板块分类
  2. 什么是Equal Error Rate (EER)
  3. SSH服务器一些操作记录
  4. vue 关闭浏览器清空token (区分刷新)
  5. 我的个人知识管理工具一览及相关经验技巧
  6. 人教版 初步使用计算机 教案,人教版信息技术六年级上册教案
  7. 又一个“戴森”崛起,网红小家电品牌凭什么俘获消费者的心?
  8. TabLayout联动ViewPager
  9. 计算机网络之数字签名、数字证书
  10. 学习笔记 | 条件概率、联合概率、全概率公式、贝叶斯公式