设置鼠标在对话框某个区域的响应,可以添加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,
整个函数的代码如下:
BOOL CHall::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
}
*鼠标形状
鼠标的形状由SetCursor函数的第二个参数决定,表示光标资源。
1.系统光标资源名称
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。
②若使用自定义的图片,可将32649改成图片的资源ID(图片需要事先加载),并且LoadCursor的第一个参数要改成当前进程的句柄(试过AfxGetApp()->m_hInstance,不奏效,待解决)。