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));//光標離開該區域恢復默認箭頭形狀
}
}