簡體   English   中英

無法更改光標(從OnSetCursor內部)

[英]Can't change the cursor (from inside OnSetCursor)

我正在嘗試通過處理OnSetCursor來更改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 ,但是光標不會更改。 我究竟做錯了什么?

使用:: SetCursor。 或者,您可以在其他任何地方調用一次SetCursor,而不捕獲WM_SETCURSOR,光標將自動設置。

您使用的CWnd :: SetCursor用於為窗口設置光標,如果您不覆蓋OnSetCursor,則將使用該光標。 也就是說,OnSetCursor的默認行為是通過調用CWnd :: SetCursor來調用帶有設置的光標的:: SetCursor。

在這種情況下,您不需要(或不想)使用MAKEINTRESOURCE ,因此請更改:

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

至:

SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
m_hHandCursor = LoadCursor(NULL ,MAKEINTRESOURCE(IDC_HAND));

將m_hHandCursor設置為成員變量,然后使用OnInitDialog中的win32 API LoadCursor進行初始化。...然后,OnSetCursor()事件始終使用SetCursor API設置此光標。...因此,您的應用程序將始終獲取系統定義的HAND光標

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM