通常当我们使用鼠标进行操作时,我们想获取鼠标位置,利用鼠标的回调函数来完成某些工作。
在项目中,主要介绍四个主要函数:
OnLButtonDown ,OnMouseMove,_OnLButtonUp,OnMouseWheel.
在添加完函数后,最好也把函数加在这里:
BEGIN_MESSAGE_MAP(CMFCApplication4Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN(
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_MOUSEWHEEL()
ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()
一、OnLButtonDown(UINT nFlags, CPoint point)
鼠标左键摁下去就会执行函数里的内容
该成员函数由框架调用,让您的应用程序处理一个Windows消息。参数传递给函数时,反映收到的消息框架收到的参数。
nFlags
指示是否各种虚拟键是否被按下。这个参数可以是任何以下值的组合:
MK_CONTROL 如果Ctrl键按下时设置这个标志。
MK_LBUTTON 如果鼠标左键按下时设置这个标志。
MK_MBUTTON 如果鼠标中键按下时设置这个标志。
MK_RBUTTON 如果鼠标右键按下时设置这个标志。
MK_SHIFT 如果Shift键按下时设置这个标志。
point
指定x和y坐标的光标。这些坐标总是相对于整个窗口的左上角。
另外:
POINT sel_pos;
GetCursorPos(&sel_pos);//sel_pos等价于point
创建一个picture Control 控件,ID为IDC_STATIC_Image_show。
ClientToScreen(&point);//将鼠标坐标转换成屏幕坐标
CRect rect;
GetDlgItem(IDC_STATIC_Image_show)-GetWindowRect(&rect);
if (rect.PtInRect(point))//判断point是否在rect内部
二、OnLButtonUp(UINT nFlags, CPoint point)
鼠标左键抬起来就会执行函数里的内容
参数跟前面一样,函数模型为:
> void CMFCApplication4Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnLButtonUp(nFlags, point);
}
三、OnMouseMove(UINT nFlags, CPoint point)
鼠标移动就会执行函数里的内容
参数跟前面一样,函数模型为:
void CMFCApplication4Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnMouseMove(nFlags, point);
}
四、OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
鼠标滚轮上下移动就会执行函数里的内容
函数模型为:
BOOL CMFCApplication4Dlg::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
if (zDelta>0) //放大
{
//sizeIncrease();
}
else //缩小
{
//sizeDecrease();
}
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
}
其实在这里zDelta放大时为120,缩小时为-120.
注意:这里的 pt 直接就是屏幕坐标,另外屏幕坐标都是以左上角为起点。