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));//光标离开该区域恢复默认箭头形状
	 }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章