MFC中自带的鼠标状态宏
MFC中为我们提供了以下的鼠标状态标识,通过这些标识我们可以获取到当前使用的鼠标的不同状态所显示的图标。
Value | Meaning |
---|---|
IDC_APPSTARTING Standard | arrow and small hourglass cursor. |
IDC_ARROW | Standard arrow cursor. |
IDC_CROSS | Crosshair cursor. |
IDC_HAND | Hand cursor. |
IDC_HELP | Arrow and question mark cursor. |
IDC_IBEAM | Ibeam cursor. |
IDC_NO | Slashed circle cursor. |
IDC_SIZEALL | Four-pointed arrow cursor pointing north, south, east, and west. |
IDC_SIZENESW | Double-pointed arrow cursor pointing northeast and southwest. |
IDC_SIZENS | Double-pointed arrow cursor pointing north and south. |
IDC_SIZENWSE | Double-pointed arrow cursor pointing northwest and southeast. |
IDC_SIZEWE | Double-pointed arrow cursor pointing west and east. |
IDC_UPARROW | Vertical arrow cursor. |
IDC_WAIT | Hourglass cursor. |
设置鼠标指针的方法
需要用的到两个函数
HCURSOR WINAPI LoadCursor(
In_opt HINSTANCE hInstance, //如果调用自带的光标则为空
In LPCTSTR lpCursorName); //需要加载的指针
HCURSOR WINAPI SetCursor(
In_opt HCURSOR hCursor //要使用的指针,如果为NULL,则不显示指针
);
在控件中的使用方法
** 这里以一个MFC的控件派生类为例子,使得控件在鼠标内外显示不同的指针光标。** 一个简单的方法。
void CLinkButton::OnMouseMove(UINT nFlags, CPoint point)
{
CBaseControl::OnMouseMove(nFlags,point);
HCURSOR hCur = LoadCursor( NULL , IDC_HAND ) ;
SetCursor(hCur);
}
void CLinkButton::OnMouseLeave()
{
HCURSOR hCur = LoadCursor( NULL , IDC_ARROW ) ;
SetCursor(hCur);
CBaseControl::OnMouseLeave();
}
在鼠标移动的消息处理函数中将光标设置成所需要的,在鼠标移出的处理函数中将光标改回原来的,但是这还不够。 系统控件会调用OnSetCursor函数将我们的光标自动改回来,所以要重写一下SetCursor的消息函数,直接返回即可。
BOOL CLinkButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return TRUE;
}
关于如何让控件能相应MouseLeave消息请参考另一篇文章,在此不做赘述。