Sdílet prostřednictvím


O kurzorech

Systém Windows poskytuje sadu standardních kurzorů, které můžou aplikace používat. V winUser.h jsou definovány následující identifikátory kurzoru:

Hodnota Význam
IDC_ARROW
MAKEINTRESOURCE(32512)
Normální výběr
IDC_IBEAM
MAKEINTRESOURCE(32513)
Text vyberte
IDC_WAIT
MAKEINTRESOURCE(32514)
Zaneprázdněn
IDC_CROSS
MAKEINTRESOURCE(32515)
Výběr přesnosti
IDC_UPARROW
MAKEINTRESOURCE(32516)
Alternativní výběr
IDC_SIZENWSE
MAKEINTRESOURCE(32642)
Diagonální změna velikosti 1
IDC_SIZENESW
MAKEINTRESOURCE(32643)
Diagonální změna velikosti 2
IDC_SIZEWE
MAKEINTRESOURCE(32644)
Horizontální změna velikosti
IDC_SIZENS
MAKEINTRESOURCE(32645)
Vertikální změna velikosti
IDC_SIZEALL
MAKEINTRESOURCE(32646)
přesunout
IDC_NO
MAKEINTRESOURCE(32648)
nedostupný
IDC_HAND
MAKEINTRESOURCE(32649)
Vyberte odkaz
IDC_APPSTARTING
MAKEINTRESOURCE(32650)
Práce na pozadí
IDC_HELP
MAKEINTRESOURCE(32651)
pomoc při výběru
IDC_PIN
MAKEINTRESOURCE(32671)
Umístění vyberte
IDC_PERSON
MAKEINTRESOURCE(32672)
Výběr osoby

K dispozici je také několik dalších kurzorů, které nemají identifikátory definované ve WinUser.h (nebo jsou považovány za zastaralé):

Hodnota Význam
MAKEINTRESOURCE(32631) kurzor pera.
MAKEINTRESOURCE(32652) posouvání kurzoru se šipkami směřujícími na sever a jih.
MAKEINTRESOURCE(32653) posouvání kurzoru se šipkami směřujícími na západ a východ.
MAKEINTRESOURCE(32654) posouvání kurzoru se šipkami směřujícími na sever, jih, východ a západ.
MAKEINTRESOURCE(32655) posouvání kurzoru se šipkou směřující na sever.
MAKEINTRESOURCE(32656) kurzor pro posouvání se šipkou směřující na jih.
MAKEINTRESOURCE(32657) kurzor pro posouvání se šipkou směřující na západ.
MAKEINTRESOURCE(32658) kurzor pro posouvání se šipkou směřující na východ.
MAKEINTRESOURCE(32659) posouvání kurzoru se šipkami směřujícími na sever a západ.
MAKEINTRESOURCE(32660) Kurzor pro posouvání se šipkami směřujícími na sever a východ.
MAKEINTRESOURCE(32661) posouvání kurzoru se šipkami směřujícími na jih a západ.
MAKEINTRESOURCE(32662) posouvání kurzoru se šipkami směřujícími na jih a východ.
MAKEINTRESOURCE(32663) kurzor disku CD se šipkou.

Informace o použití standardních kurzorů najdete v tématu Pokyny.

Ke každému standardnímu kurzoru je přidružený odpovídající výchozí obrázek. Uživatel nebo aplikace může kdykoli nahradit výchozí obrázek přidružený ke standardnímu kurzoru. Aplikace nahradí výchozí image pomocí funkce SetSystemCursor.

Aplikace může pomocí funkce GetIconInfo načíst aktuální obrázek kurzoru a nakreslit kurzor pomocí funkce DrawIconEx.

Vlastní kurzory jsou navrženy pro použití v konkrétní aplikaci a mohou být libovolným návrhem, který vývojář definuje. Následující obrázek ukazuje několik vlastních kurzorů.

vlastní kurzory, včetně ruky, banánu, bubnu, náramkových hodinek, metronomu

Kurzory můžou být buď monochromatické, nebo barevné a buď statické, nebo animované. Typ kurzoru použitý v určitém počítačovém systému závisí na zobrazení systému. Staré displeje, jako je VGA, nepodporují barvy ani animované kurzory. Nové displeje, jejichž ovladače zobrazení používají nezávislý rastrový obrázek na zařízení (DIB), je podporují.

Kurzory a ikony jsou podobné a lze je v mnoha situacích používat zaměnitelně. Jediným rozdílem mezi nimi je, že obrázek zadaný jako kurzor musí být ve formátu, který může zobrazení podporovat. Například kurzor musí být monochromatický pro zobrazení VGA.

Tento přehled obsahuje informace o následujících tématech:

Populární místo

V kurzoru označuje pixel označovaný jako horké místo přesné umístění obrazovky ovlivněné událostí myši, například kliknutí na tlačítko myši. Horký bod je obvykle ústředním bodem kurzoru. Systém sleduje a rozpozná tento bod jako pozici kurzoru. Například typická horká místa jsou pixely na špičce kurzoru ve tvaru šipky a pixel uprostřed kurzoru ve tvaru křížku. Následující obrázek znázorňuje dva kurzory z kreslicího programu, na kterých jsou aktivní místa přiřazená ke špičce štětce a zaměřovači plechovky s barvou.

horké skvrny na dvou kurzorech

Když dojde k události vstupu myši, ovladač myši přeloží událost do příslušné zprávy myši, která obsahuje souřadnice horkého místa. Systém odešle zprávu myši do okna, které obsahuje horké místo nebo do okna, které zachytává vstup myši. Další informace naleznete v tématu Vstup myši.

Myš a kurzor

Systém odráží pohyb myši přesunutím kurzoru na obrazovce odpovídajícím způsobem. Když se kurzor přesune přes různé části oken nebo do různých oken, systém (nebo aplikace) změní vzhled kurzoru. Když například kurzor překročí hypertextový odkaz, systém změní kurzor ze šipky na ruku.

standardní kurzor se změní na ruku, když se nachází nad hypertextovým odkazem

Pokud systém nemá myš, systém zobrazí a přesune kurzor pouze v případě, že uživatel zvolí určité systémové příkazy, například ty, které se používají k nastavení velikosti nebo přesunutí okna. Pokud chcete uživateli poskytnout metodu zobrazení a přesunutí kurzoru v případě, že není k dispozici myš, může aplikace pomocí funkcí kurzoru simulovat pohyb myši. Vzhledem k této možnosti simulace může uživatel k přesunutí kurzoru použít šipkové klávesy.

Vytvoření kurzoru

Vzhledem k tomu, že jsou předdefinované standardní kurzory, není nutné je vytvářet. Pokud chcete použít standardní kurzor, aplikace načte úchyt kurzoru pomocí funkce LoadCursor nebo LoadImage. úchyt kurzoru je jedinečná hodnota typu HCURSOR, která identifikuje standardní nebo vlastní kurzor.

Pokud chcete vytvořit vlastní kurzor pro aplikaci, obvykle používáte grafickou aplikaci a zahrnete kurzor jako prostředek do definičního souboru aplikace. Za běhu zavolejte LoadCursor pro načtení úchytu kurzoru. Prostředky kurzoru obsahují data pro několik různých zobrazovacích zařízení. Funkce LoadCursor automaticky vybere nejvhodnější data pro aktuální zobrazovací zařízení. Abyste načetli kurzor přímo ze souboru .CUR nebo .ANI, použijte funkci LoadCursorFromFile.

Vlastní kurzor můžete vytvořit také za běhu pomocí funkce CreateIconIndirect, která vytvoří kurzor založený na obsahu struktury ICON INFO. Funkce GetIconInfo vyplní tuto strukturu souřadnicemi horkého bodu a informacemi týkajícími se přidružené masky a barvy.

Aplikace by měly implementovat vlastní kurzory jako prostředky a používatLoadCursor , LoadCursorFromFilenebo LoadImage místo vytváření kurzoru za běhu. Použití prostředků kurzoru zabraňuje závislosti zařízení, zjednodušuje lokalizaci a umožňuje aplikacím sdílet návrhy kurzorů.

Funkce CreateIconFromResourceEx umožňuje aplikaci vytvářet ikony a kurzory na základě dat prostředků. CreateIconFromResourceEx vytvoří kurzor na základě binárních dat prostředků z jiných spustitelných souborů (.exe) nebo knihoven DLL. Musí být předcházeno voláním funkce LookupIconIdFromDirectoryEx a několika funkcemi zdrojů. LookupIconIdFromDirectoryEx identifikuje nejvhodnější data kurzoru pro aktuální zobrazovací zařízení. Další informace o funkcích prostředků naleznete v tématu Prostředky.

Umístění a vzhled kurzoru

Systém automaticky zobrazí kurzor myši a aktualizuje jeho pozici na obrazovce. Aktuální souřadnice obrazovky kurzoru můžete získat a přesunout kurzor na libovolné místo na obrazovce pomocí funkce GetCursorPos a SetCursorPos.

Můžete také načíst úchyt k aktuálnímu kurzoru pomocí funkce GetCursor a nastavit kurzor pomocí funkce SetCursor. Po volání SetCursor, vzhled kurzoru se nezmění, dokud se myš nepřesune, kurzor se explicitně nastaví na jiný kurzor nebo se spustí systémový příkaz.

Když uživatel přesune myš, systém překreslí kurzor na nové místo. Systém automaticky překreslí návrh kurzoru přidružený k oknem, na které kurzor ukazuje.

Kurzor můžete skrýt a znovu zobrazit beze změny návrhu kurzoru pomocí funkce ShowCursor. Tato funkce používá interní čítač k určení, kdy se má kurzor skrýt nebo zobrazit. Pokus o zobrazení kurzoru zvýší čítač; pokus o skrytí kurzoru sníží čítač. Kurzor je viditelný pouze v případě, že je tento čítač větší nebo roven nule.

Funkce GetCursorInfo získá následující informace pro globální kurzor: zda je kurzor skrytý nebo zobrazený, úchyt kurzoru a souřadnice kurzoru.

Omezení kurzoru

Kurzor můžete omezit na obdélníkovou oblast na obrazovce pomocí funkce ClipCursor. To je užitečné, když uživatel musí reagovat na určitou událost v omezené oblasti obdélníku. Můžete například použít ClipCursor omezit kurzor na modální dialogové okno, což uživateli brání v interakci s jinými okny, dokud se dialogové okno neskončí.

Funkce GetClipCursor načte souřadnice obrazovky obdélníkové oblasti, na kterou je kurzor dočasně omezen. Pokud je nutné omezit kurzor, můžete tuto funkci použít také k uložení souřadnic původní oblasti, ve které se kurzor může přesunout. Pak můžete kurzor obnovit do původní oblasti, když už není nutné nové omezení.

Zničení kurzoru

Můžete zničit úchyt kurzoru a uvolnit paměť kurzor použitý voláním DestroyCursor funkce. Tato funkce však nemá žádný vliv na sdílený kurzor. Sdílený kurzor je platný, pokud modul, ze kterého byl načten, zůstane v paměti. Následující funkce získávají sdílený kurzor:

  • LoadCursor
  • LoadCursorFromFile
  • LoadImage (pokud používáte příznak LR_SHARED)
  • CopyImage (pokud použijete příznak LR_COPYRETURNORG a hImage je sdílený kurzor)

Pokud už nepotřebujete kurzor, který jste vytvořili pomocí funkce CreateIconIndirect, měli byste zničit kurzor. Funkce DestroyIcon zničí úchyt kurzoru a uvolní veškerou paměť použitou kurzorem. Tuto funkci použijte pouze na kurzory vytvořené pomocí CreateIconIndirect.

Duplikace kurzoru

Funkce CopyCursor zkopíruje úchyt kurzoru. To umožňuje kódu aplikace nebo DLL získat identifikátor kurzoru vlastněného jiným modulem. Pokud je druhý modul uvolněný, může modul, který zkopíroval kurzor, stále používat návrh kurzoru.

Informace o tom, jak přidat, odebrat nebo nahradit prostředky kurzoru ve spustitelných souborech, naleznete v tématu Resources.

Kurzor třídy okna

Když zaregistrujete třídu okna pomocí funkce RegisterClass, můžete jí přiřadit výchozí kurzor, který se označuje jako kurzor třídy třídy. Jakmile aplikace zaregistruje třídu okna, každé okno této třídy má zadaný kurzor třídy.

Pokud chcete upravit kurzor ve třídě, zpracujte zprávu WM_SETCURSOR. Kurzor třídy můžete také nahradit pomocí funkce SetClassLong. Tato funkce změní výchozí nastavení okna pro všechna okna zadané třídy. Další informace naleznete v tématu Class Cursor.