参考文章:1.https://bbs.csdn.net/topics/70084486
2.https://blog.csdn.net/wang15061955806/article/details/52385911
该函数专门由于设置光标的形状,是对WM_SETCURSOR消息的响应。
1.该消息在鼠标发生任何事件时都能响应(单击,双击,移动,且该函数的调用在对于鼠标响应函数之前)。
如果处理了该函数,一定要返回return TRUE,不要让父类再处理。
一、函数原型
afx_msg BOOL CWnd::OnSetCursor(CWnd* pWnd,UINT nHitTest,UINT message);
参数一:当前鼠标位于哪个窗口(控件)上,可以通过pWnd->GetDlgCtrID()来判断设置鼠标形状
参数二:表示当前鼠标位于实现该函数的窗口的哪个位置(HTBORDER HTCLIENT等等,参考OnNcHitTest函数)
参数三:表示鼠标消息的值(WM_LBUTTONDOWN WM——LBUTTONUP诸如此类)
有了这些参数,通过判断就可以对于不同位置,不同控件,不同鼠标状态做不同的处理了
二、改变鼠标形状
hCursor=LoadCursor(NULL,IDC_WAIT);
SetCursor(hCursor);
return TRUE;
当改变鼠标的形状后一定要返回TURE,表示该窗口已经处理鼠标形状完毕,不需要再交给该窗口的父窗口处理了,如果不返回TURE,则父窗口会默认恢复光标形状。
三、自定义判断条件
例如当a=1时让鼠标变成忙,=2时让光标变成箭头,非常灵活