..::Zm∞na kurzoru pro danΘ okno::..

Kurzor pro aplikaci lze zm∞nit velmi jednoduÜe. (Pokud vφte jak na to.)
Lze to provΘst kdykoli za b∞hu aplikace a pro kterΘkoli okno.

Postup:

P°edpoklßdßm, ₧e mßte do aplikace p°idan² kurzor nap°φklad s identifikßtorem IDC_CURSOR.
Nejd°φve v t°φd∞ okna (CView, CWnd a jejich potomci) p°idejte Φlenskou prom∞nnou typu HCURSOR. Nap°φklad:

private:

HCURSOR cursor;

V konstrukotoru ji nastavte na NULL.
Te∩ vytvo°te funkci reagujφcφ na zprßvu WM_SETCURSOR a upravte ji takto:

BOOL MyWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)

{

// Pokud je kurzor nahrßn pou₧ijeme jej.

if (cursor != NULL)

{

::SetCursor(cursor);

return TRUE;

}

// Jinak ponechßme standardnφ kurzor.

return CWnd::OnSetCursor(pWnd, nHitTest, message);

}

Tato funkce se automaticky volß v₧dy, kdy₧ je t°eba m∞nit kurzor. (T.j. poka₧dΘ, kdy₧ p°ejdeme myÜφ z jednoho okna do druhΘho,...)

Jist∞ jste si vÜimli, ₧e mßme prom∞nnou cursor nastavenu na NULL, tak₧e se bude pou₧φvat standardnφ kurzor aplikace.
Tak₧e musφme jeÜt∞ vytvo°it funkci, kterß do prom∞nnΘ cursor nahraje n∞jak² kurzor a nap°φklad v konstruktoru ji zavolat. (Nebo kdykoli b∞hem chodu aplikace.)
P°φklad tΘto funkce je zde:

BOOL MyWnd::SetWndCursor(int nCursorId)

{

HINSTANCE hInstResource;

// ZruÜenφ p°edchozφch kurzor∙

if (cursor != NULL) ::DestroyCursor(cursor);

cursor = NULL;

 

// Pokud byl parametrem p°edßn identifikßtor kurzoru (Pokud mφsto identifikßtoru kurzoru p°edßte parametrem

// nCursorId hodnotu -1, vrßtφ se aplikace ke standardnφmu kurzoru.

if (nCursorId != -1)

{

// Najdeme handle pro zdroje aplikace (konkrΘtn∞ pro kurzor p°edan² parametrem).

hInstResource = AfxFindResourceHandle(MAKEINTRESOURCE(nCursorId), RT_GROUP_CURSOR);  

// Nahrajeme kurzor

cursor = (HCURSOR)::LoadImage(hInstResource/*AfxGetApp()->m_hInstance*/, MAKEINTRESOURCE(nCursorId), IMAGE_CURSOR, 0, 0, 0);

// Pokud se n∞co nepovedlo vrßtφme FALSE

if (cursor == NULL) return FALSE;

}

 

return TRUE;

}

Volßnφ tΘto funkce je jednoduchΘ:

SetWndCursor(IDC_CURSOR);

Pokud se chceme vrßtit ke standardnφmu kurzoru je volßnφ funkce takovΘto:

SetWndCursor(-1);