今天在做MFC程序的时候,需要实现在指定的控件(picture控件)内来回移动画好的3D模型的功能。
经过搜集资料,整理如下
功能实现如下代码:
方法一:在鼠标移动响应函数(OnMouseMove)中判断鼠标是否在控件区域
void CcamDlg::OnMouseMove(UINT nFlags, ::CPoint point) //鼠标移动
{
::CPoint point1;
CRect pRect;
GetClientRect(pRect);//获取屏幕的矩形大小
//先获取鼠标相对于屏幕的坐标
GetCursorPos(&point1);
//之后把当前鼠标在屏幕上的坐标转化为相对于窗体rect的坐标
ScreenToClient(&point1);
CRect rect;
GetDlgItem(IDC_STATIC_OCC)->GetWindowRect(&rect);//获得指定控件的矩形大小
ScreenToClient(&rect);//最后把当前鼠标在窗体上的坐标转化为相对于控件rect的坐标
if (rect.PtInRect(point1))//判断鼠标光标是否在指定控件区域内
{
//此处写你需要在指定的控件内进行的操作
}
else
{
//此处写你需要不在指定的控件内进行的操作
}
}
方法二:获取控件区域,判断鼠标当前点是否在控件区域内
WINDOWPLACEMENT wp;
RECT rect;
GetDlgItem(IDC_LIST1)->GetWindowPlacement(&wp); //client坐标系
rect = wp.rcNormalPosition;
if (point.x > rect.left && point.x < rect.right&& point.y> rect.top && point.y < rect.bottom)
{
//do something
}