2

我正在尝试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每次我移动鼠标时都会调用它,但光标不会改变。我究竟做错了什么?

4

3 回答 3

5

使用 ::SetCursor。或者你可以在别处调用一次SetCursor而不捕获WM_SETCURSOR,光标会自动设置。

您使用的 CWnd::SetCursor 用于为窗口设置光标,如果您不覆盖 OnSetCursor,则将使用该光标。也就是说,OnSetCursor 的默认行为是调用 ::SetCursor 并通过调用 CWnd::SetCursor 设置光标一。

于 2012-04-18T08:29:56.277 回答
1
m_hHandCursor = LoadCursor(NULL ,MAKEINTRESOURCE(IDC_HAND));

将 m_hHandCursor 作为成员变量并在 OnInitDialog 中使用 win32 API LoadCursor 进行初始化......然后 OnSetCursor() 事件始终使用 SetCursor API 设置此游标......因此您的应用程序将始终获得系统定义的 HAND 游标

于 2014-02-11T14:25:55.780 回答
1

在这种情况下您不需要(或不想)使用MAKEINTRESOURCE,因此请更改:

SetCursor(AfxGetApp()->LoadStandardCursor(MAKEINTRESOURCE(IDC_CROSS)));

至:

SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
于 2012-04-18T07:50:41.483 回答