设置鼠标在对话框某个区域的响应,可以添加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是自定义的鼠标形状,下面再详细解释
整个函数的代码如下:
BOOLCHall::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if(pWnd == GetDlgItem(IDC_BTN_MODIFY))
{
SetCursor(LoadCursor(NULL, IDC_HAND));
return TRUE;
}
return CDialog::OnSetCursor(pWnd, nHitTest, message);
}
*鼠标形状
鼠标的形状由SetCursor函数的第二个参数决定,表示光标资源。
系统光标资源名称
IDC_HAND | 手型 |
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 | 沙漏 |