无法更改光标(从OnSetCursor内部)

时间:2012-04-18 07:44:39

标签: c++ winapi mfc

我正在尝试通过处理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,但不会更改光标。我做错了什么?

3 个答案:

答案 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游标