我正在尝试通过处理CStatic
来改变我的OnSetCursor
派生类中的光标
class CMyStatic : public CStatic
{
// ....
};
BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
ON_WM_SETCURSOR()
END_MESSAGE_MAP()
BOOL CMyStatic::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
TRACE(_T("OnSetCursor\n"));
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
return TRUE;
}
每次移动鼠标时都会调用 OnSetCursor
,但不会更改光标。我做错了什么?
答案 0 :(得分:5)
使用:: SetCursor。或者您可以在其他地方调用SetCursor并且不捕获WM_SETCURSOR,并且将自动设置光标。
您使用的CWnd :: SetCursor用于设置窗口的光标,如果不覆盖OnSetCursor,将使用该光标。也就是说,OnSetCursor的默认行为是调用:: SetCursor,并通过调用CWnd :: SetCursor设置光标。
答案 1 :(得分:1)
在这种情况下,您不需要(或不想)使用MAKEINTRESOURCE
,因此请更改:
SetCursor(AfxGetApp()->LoadStandardCursor(MAKEINTRESOURCE(IDC_CROSS)));
要:
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
答案 2 :(得分:1)
m_hHandCursor = LoadCursor(NULL ,MAKEINTRESOURCE(IDC_HAND));
将m_hHandCursor作为成员变量并使用OnInitDialog中的win32 API LoadCursor初始化....然后OnSetCursor()事件设置此游标始终使用SetCursor API ....因此您的应用程序将始终获得系统定义的HAND游标