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