设置鼠标在对话框某个区域的响应,可以添加WM_MouseMove消息响应,并在OnMouseMove()函数中实现操作。
但是,控件其实也是一个对话框。所以,如果要设置鼠标在控件所在范围内的事件,用WM_MouseMove是行不通的。
解决方法:
重载OnSetCursor()方法。
步骤:
1.打开对应对话框的类向导ClassWizard。
2.在消息映射MessageMaps中添加消息Message:WM_SETCURSOR。
3.然后程序代码中会添加进函数:
OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message
4.在该函数中添加if语句,其中的条件语句判断是否到达指定控件,
如:if(pWnd == GetDlgItem(IDC_BTN_MODIFY))
5.在if语句中将鼠标设置成目标样式
SetCursor(LoadCursor(NULL, IDC_HAND)); //此处IDC_HAND是自定义的鼠标形状,下面再详细解释
整个函数的代码如下:
BOOL CHall::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if(pWnd == GetDlgItem(IDC_BTN_MODIFY))
{
SetCursor(LoadCursor(NULL, IDC_HAND));
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
*鼠标形状
鼠标的形状由SetCursor函数的第二个参数决定,表示光标资源。
1.系统光标资源名称
IDC_APPSTARTING 标准的箭头和小沙漏
IDC_ARROW 标准的箭头
IDC_CROSS 十字光标
IDC_HELP 标准的箭头和问号
IDC_IBEAM 工字光标
IDC_NO 禁止圈
IDC_SIZEALL 四向箭头指向东、西、南、北
IDC_SIZENESW 双箭头指向东北和西南
IDC_SIZENS 双箭头指向南北
IDC_SIZENWSE 双箭头指向西北和东南
IDC_SIZEWE 双箭头指向东西
IDC_UPARROW 垂直箭头
IDC_WAIT 沙漏
2.自定义光标形状
在StdAfx.h中,或者对应对话框的头文件中宏定义:
#ifndef IDC_HAND
#define IDC_HAND MAKEINTRESOURCE(32649)
#endif
①以上表示使用手型,其实也属于系统图标,LoadCursor的第一参数为NULL。