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);