响应了WM_SetCursor消息,如何改变鼠标形状
响应了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消息,如何改变鼠标形状相关推荐
- Qt如何改变鼠标形状
一.利用Qt自带的资源修改鼠标形状 1.确定坐标范围,在坐标(0 ~ width,0 ~ height)范围内改变鼠标形状 QPoint mousepos = e->pos(); int wid ...
- html中怎么改变鼠标形状,css鼠标样式语法及20种可选值(属性)
我们对Windows各种各样的鼠标样式都不陌生,当鼠标移动到不同的地方时,当鼠标执行不同的功能时,当系统处于不同的状态时,都会使鼠标的形状发生变化.而在网页上往往只有当鼠标在超级链接上时才出现一个手形 ...
- Java之Cursor改变鼠标形状
将鼠标设置成手掌形状 import javax.swing.JFrame; import java.awt.Cursor; public class uu {static Cursor cursor= ...
- 前端鼠标形状设置--cursor
前端鼠标形状设置–cursor 前端鼠标形状设置,可以通过设置cursor属性来修改. 在Vue项目中,改变鼠标形状设置:在index.html中写入下面的代码即可. body{ cursor: ur ...
- CSS/HTML改变鼠标指针形状方法 属性说明
改变鼠标指针形状的方法有两种:第一种:用的来改变鼠标指针形状.另一种是:利用第三方控件的方法,而我自己最常用的是第一种:用css样式表来改变鼠标指针形状 我们先来看第一种:用来改变鼠标指针形状. 有些 ...
- 改变鼠标指针形状两种方法及实例
改变鼠标指针形状的方法有两种:一种:用css样式表来改变鼠标指针形状.另一种是:利用第三方控件的方法,而我自己最常用的是第一种:用css样式表来改变鼠标指针形状 我们先来看第一种:用css样式表来改变 ...
- CSS/HTML 改变鼠标指针形状
https://www.cnblogs.com/hanqishihu/p/5805566.html CSS/HTML 改变鼠标指针形状 改变鼠标指针形状的方法有两种:第一种:用的来改变鼠标指针形状.另 ...
- tkinter 菜单添加事件_Python+tkinter设置Label字体、字号、样式、对齐方式、鼠标形状、响应鼠标事件...
推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书详情:配套资源:用书 ...
- Python+tkinter设置Label字体、字号、样式、对齐方式、鼠标形状、响应鼠标事件
推荐图书: <Python程序设计基础(第2版)>,ISBN:9787302490562,董付国,清华大学出版社,第16次印刷,清华大学出版社2019年度畅销图书 图书详情: 配套资源:用 ...
最新文章
- python简单代码 春节集五福-集五福活动又来了,不过这个价值几十亿的大项目也别错过...
- jqgrid 列表条件查询的几步关键操作
- bzoj 1797: [Ahoi2009]Mincut 最小割 (网络流)
- Andropid 系统(273)--如何修改google libphonenumber的meta data (号码归属地,紧急号码列表,号码格式,号码范围)
- 这家厂商正式宣布退出手机市场:将加强汽车零部件业务
- golang 使用openoffice 生成pdf_使用golang生成PDF文件
- 通过一个简单例子看懂遗传算法,附MATLAB代码
- 如何训练结构化思维能力?它是一种工作方法还是思维方式?
- 悉尼大学理学院计算机科学,悉尼大学理学院本科申请
- 研发里那只看不见的手,勒的很疼
- 儿子跟妈妈关系不好怎么办?这里有解决办法!
- 智能化LED照明技术的最新发展
- android phone电脑驱动下载,全机型Android Phone驱动及安装教程(XP,Vista,Win7).pdf
- gvim for verilog简易配置
- Mac Docker入门安装使用
- 关于bios中设置upan启动
- 基于canvas制作绚丽的倒计时效果
- 说话做事要有结构性思维
- Win7系统的笔记本u盘数据如何恢复
- Windows XP系统瘦身优化加速