MFC在指定控件区域内改变鼠标光标形状

MFC想要实现鼠标光标在指定区域内能够改变其形状,变成十字,需要对OnMouseMove的消息进行处理,在消息处理函数内添加以下代码,实现鼠标光标改变的效果。

void CInnovpowerUAVDlg::OnMouseMove(UINT nFlags, CPoint point)
{
	 // TODO:  在此添加消息处理程序代码和/或调用默认值
	 CPoint point1;
	 CRect pRect;
	 GetClientRect(pRect);//获取屏幕的矩形大小
	 //先获取鼠标相对于屏幕的坐标
	 GetCursorPos(&point1);


	 //之后把当前鼠标在屏幕上的坐标转化为相对于窗体rect的坐标
	 ScreenToClient(&point1);
	 CRect rect;
	 GetDlgItem(IDC_STATICIMAGE)->GetWindowRect(&rect);//获得指定控件的矩形大小
	 ScreenToClient(&rect);//最后把当前鼠标在窗体上的坐标转化为相对于控件rect的坐标


	 if (rect.PtInRect(point1))//判断鼠标光标是否在指定控件区域内
	 {
		 /* ::SetCursor(::LoadCursor(NULL, IDC_CROSS));*/
		 HCURSOR cursor = LoadCursor(NULL,IDC_CROSS);
		 ::SetCursor(cursor);//将光标设置成十字
		 SetClassLong(this->GetSafeHwnd(),
			 GCL_HCURSOR,
			 (LONG)LoadCursor(NULL, IDC_CROSS));//使光标在该区域不再闪烁
	 }
	 else
	 {
		 SetClassLong(this->GetSafeHwnd(),
			 GCL_HCURSOR,
			 (LONG)LoadCursor(NULL, IDC_ARROW));//光标离开该区域恢复默认箭头形状
	 }
}

猜你喜欢

转载自blog.csdn.net/kai69/article/details/80707233