Sdílet prostřednictvím


Přehled vstupu myši

Myš je důležitá, ale volitelná uživatelská vstupní zařízení pro aplikace. Dobře napsaná aplikace by měla obsahovat rozhraní myši, ale nemělo by záviset pouze na myši pro získání uživatelského vstupu. Aplikace by měla také poskytovat plnou podporu klávesnice.

Aplikace přijímá vstup myši ve formě zpráv, které se odesílají nebo odesílají do oken.

Tato část se zabývá následujícími tématy:

Kurzor myši

Když uživatel přesune myš, systém přesune rastrový obrázek na obrazovce s názvem kurzor myši. Kurzor myši obsahuje bod s jedním pixelem, který se nazývá aktivní bod, bod, který systém sleduje a rozpozná jako pozici kurzoru. Když dojde k události myši, okno, které obsahuje horké místo, obvykle obdrží zprávu myši, která je výsledkem události. Okno nemusí být aktivní nebo mít fokus klávesnice pro příjem zprávy myši.

Systém udržuje proměnnou, která řídí rychlost myši – tj. vzdálenost, po kterou se kurzor přesune, když uživatel přesune myš. K načtení nebo nastavení rychlosti myši můžete použít funkci SystemParametersInfo s příznakem SPI_GETMOUSE nebo SPI_SETMOUSE. Další informace o kurzorech myši naleznete v tématu Kurzory.

Zachycení myši

Systém obvykle publikuje zprávu myši do okna, které obsahuje aktivní místo kurzoru, když dojde k události myši. Aplikace může toto chování změnit pomocí funkce SetCapture ke směrování zpráv myši do konkrétního okna. Okno obdrží všechny zprávy myši, dokud aplikace nevolá ReleaseCapture funkce nebo určuje jiné okno zachycení, nebo dokud uživatel klikne na okno vytvořené jiným vláknem.

Když se záznam myši změní, systém odešle WM_CAPTURECHANGED zprávu do okna, které ztrácí zachycení myši. Parametr lParam zprávy určuje popisovač okna, které získává zachycení myši.

Vstup myši může zachytit pouze okno popředí. Když se okno pozadí pokusí zachytit vstup myši, obdrží zprávy pouze pro události myši, ke kterým dochází, když je kurzor v viditelné části okna.

Zachytávání vstupu myši je užitečné, pokud okno musí přijímat všechny vstupy myši, i když se kurzor přesune mimo okno. Aplikace například obvykle sleduje pozici kurzoru za událostí tlačítka myši, která následuje za kurzorem, dokud nedojde k události tlačítka myši nahoru. Pokud aplikace nezaznamenala vstup myši a uživatel uvolní tlačítko myši mimo okno, okno neobdrží zprávu o tlačítku.

Vlákno může použít funkci GetCapture k určení, zda jedno z jeho oken zachytilo myš. Pokud některá z oken vlákna zachytila myš, GetCapture načte úchyt do okna.

Mouse ClickLock

Funkce přístupnosti Mouse ClickLock umožňuje uživateli po jediném kliknutí uzamknout primární tlačítko myši. U aplikace se tlačítko stále zobrazuje jako stisknuté. Pokud chcete tlačítko odemknout, může aplikace odeslat libovolnou zprávu myši nebo uživatel může kliknout na libovolné tlačítko myši. Tato funkce umožňuje uživatelům provádět složitější kombinace myši jednodušeji. Například ty s určitými fyzickými omezeními můžou zvýrazňovat text, přetahovat objekty nebo otevírat nabídky snadněji. Další informace naleznete v následujících příznaky a poznámky v SystemParametersInfo:

  • SPI_GETMOUSECLICKLOCK
  • SPI_SETMOUSECLICKLOCK
  • SPI_GETMOUSECLICKLOCKTIME
  • SPI_SETMOUSECLICKLOCKTIME

Konfigurace myši

I když je myš důležitým vstupním zařízením pro aplikace, nemusí každý uživatel nutně mít myš. Aplikace může určit, zda systém obsahuje myš předáním hodnoty SM_MOUSEPRESENT do funkce GetSystemMetrics.

Windows podporuje myš s až třemi tlačítky. Na myši se třemi tlačítky jsou tlačítka označená jako levá, prostřední a pravá tlačítka. Zprávy a pojmenované konstanty související s tlačítky myši identifikují tlačítka písmeny L, M a R. Tlačítko myši s jedním tlačítkem se považuje za levé tlačítko. I když Windows podporuje myš s více tlačítky, většina aplikací používá levé tlačítko především a ostatní minimálně, pokud vůbec.

Aplikace mohou také podporovat kolečko myši. Kolečko myši lze stisknout nebo otočit. Když je kolečko myši stisknuto, funguje jako prostřední (třetí) tlačítko, které do aplikace odesílá normální zprávy prostředních tlačítek. Když se otočí, odešle se do vaší aplikace zpráva o kolečku. Další informace najdete v části Kolečko myši.

Aplikace můžou podporovat příkazová tlačítka aplikace. Tato tlačítka, označovaná jako XBUTTON1 nebo XBUTTON2, jsou navržená tak, aby umožňovala snadnější přístup k internetovému prohlížeči, elektronické poště a mediálním službám. Při stisknutí XBUTTON1 nebo XBUTTON2 se do aplikace odešle WM_APPCOMMAND zpráva. Další informace najdete v popisu v WM_APPCOMMAND zprávě.

Aplikace může určit počet tlačítek myši předáním hodnoty SM_CMOUSEBUTTONS funkci GetSystemMetrics. Ke konfiguraci myši pro levého uživatele může aplikace použít funkci SwapMouseButton k obrácení významu tlačítek myši doleva a doprava. Předání hodnoty SPI_SETMOUSEBUTTONSWAP funkci SystemParametersInfo je dalším způsobem, jak obrátit význam tlačítek. Všimněte si však, že myš je sdílený prostředek, takže vrácení významu tlačítek ovlivní všechny aplikace.

XBUTTONs

Windows podporuje myši až s pěti tlačítky: vlevo, uprostřed a vpravo, plus dvě další tlačítka s názvem XBUTTON1 a XBUTTON2. Tlačítka XBUTTON1 a XBUTTON2 se často nacházejí na stranách myši poblíž základny. Tato tlačítka navíc nejsou přítomna na všech myších. Pokud jsou k dispozici, tlačítka XBUTTON1 a XBUTTON2 se často mapují na funkci aplikace, jako je navigace vpřed a dozadu ve webovém prohlížeči.

Správce oken podporuje XBUTTON1 a XBUTTON2 prostřednictvím WM_XBUTTON* a WM_NCXBUTTON* zpráv. HIWORD WPARAM v těchto zprávách obsahuje příznak označující, který XBUTTON byl stisknut. Protože tyto zprávy myši také fit mezi konstanty WM_MOUSEFIRST a WM_MOUSELAST, aplikace může filtrovat všechny zprávy myši pomocí GetMessage nebo PeekMessage.

Následující podpora XBUTTON1 a XBUTTON2:

Následující rozhraní API byla upravena tak, aby podporovala tato tlačítka:

Je nepravděpodobné, že podřízené okno v aplikaci komponenty bude moci přímo implementovat příkazy pro XBUTTON1 a XBUTTON2. Proto DefWindowProc odešle WM_APPCOMMAND zprávu do okna, když XBUTTON1 nebo XBUTTON2 kliknete. DefWindowProc také odešle zprávu WM_APPCOMMAND do nadřazeného okna. To se podobá způsobu, jakým se místní nabídky vyvolávají kliknutím pravým tlačítkem –DefWindowProc odešle WM_CONTEXTMENU zprávu do nabídky a odešle ji také do nadřazeného objektu. Pokud DefWindowProc obdrží WM_APPCOMMAND zprávu pro okno nejvyšší úrovně, zavolá háček prostředí s kódem HSHELL_APPCOMMAND.

K dispozici je podpora klávesnic, které mají další klávesy pro funkce prohlížeče, funkce médií, spouštění aplikací a řízení spotřeby. Další informace najdete v tématu Klávesy pro procházení a další funkce.

Zprávy myši

Myš generuje vstupní událost, když uživatel přesune myš nebo stiskne nebo uvolní tlačítko myši. Systém převádí vstupní události myši na zprávy a publikuje je do fronty zpráv příslušného vlákna. Když jsou zprávy myši publikovány rychleji než vlákno může zpracovat, systém zahodí všechny zprávy myši kromě nejnovější zprávy myši.

Okno obdrží zprávu myši, když dojde k události myši, když je kurzor uvnitř ohraničení okna nebo když okno zachytilo myš. Zprávy myši jsou rozdělené do dvou skupin: zprávy klientské oblasti a zprávy oblasti jiného typu než klient. Aplikace obvykle zpracovává zprávy oblasti klienta a ignoruje zprávy oblasti jiného typu než klient.

Tato část se zabývá následujícími tématy:

Zprávy myši v oblasti klienta

Okno obdrží zprávu myši v oblasti klienta, když dojde k události myši v klientské oblasti okna. Systém publikuje WM_MOUSEMOVE zprávu do okna, když uživatel přesune kurzor v klientské oblasti. Publikuje jednu z následujících zpráv, když uživatel stiskne nebo uvolní tlačítko myši, zatímco kurzor je v klientské oblasti.

Zpráva Význam
WM_LBUTTONDBLCLK Levé tlačítko myši bylo poklikáním.
WM_LBUTTONDOWN Levé tlačítko myši se stisklo.
WM_LBUTTONUP Tlačítko levé myši bylo vydáno.
WM_MBUTTONDBLCLK Prostřední tlačítko myši bylo poklikáním.
WM_MBUTTONDOWN Prostřední tlačítko myši bylo stisknuto.
WM_MBUTTONUP Prostřední tlačítko myši bylo uvolněno.
WM_RBUTTONDBLCLK Poklikáním na pravé tlačítko myši.
WM_RBUTTONDOWN Pravé tlačítko myši bylo stisknuto.
WM_RBUTTONUP Pravé tlačítko myši bylo vydáno.
WM_XBUTTONDBLCLK Poklikáním na tlačítko myši X.
WM_XBUTTONDOWN Bylo stisknuto tlačítko myši X.
WM_XBUTTONUP Bylo vydáno tlačítko myši X.

 

Kromě toho může aplikace volat funkci TrackMouseEvent, aby systém odesílal dvě další zprávy. Odešle zprávu WM_MOUSEHOVER, když kurzor najede na oblast klienta po určitou dobu. Publikuje WM_MOUSELEAVE zprávu, když kurzor opustí klientskou oblast.

Parametry zprávy

Parametr lParam zprávy myši klientské oblasti označuje pozici aktivního místa kurzoru. Slovo s nízkým pořadím označuje souřadnici x aktivního místa a slovo s vysokým pořadím označuje souřadnici y. Souřadnice jsou zadány v souřadnicích klienta. V souřadnicovém systému klienta jsou všechny body na obrazovce zadané vzhledem ke souřadnicům (0,0) v levém horním rohu klientské oblasti.

Parametr wParam obsahuje příznaky, které označují stav ostatních tlačítek myši a kláves CTRL a SHIFT v době události myši. Tyto příznaky můžete zkontrolovat, když zpracování zprávy myši závisí na stavu jiného tlačítka myši nebo klávesy CTRL nebo SHIFT. Parametr wParam může být kombinací následujících hodnot.

Hodnota Popis
MK_CONTROL Klávesa CTRL je dole.
MK_LBUTTON Levé tlačítko myši je dole.
MK_MBUTTON Prostřední tlačítko myši je dole.
MK_RBUTTON Pravé tlačítko myši je dole.
MK_SHIFT Klávesa SHIFT je dole.
MK_XBUTTON1 XBUTTON1 je dole.
MK_XBUTTON2 XBUTTON2 je dole.

 

Double-Click zprávy

Systém vygeneruje zprávu poklikáním, když uživatel dvakrát po sobě klikne na tlačítko myši. Když uživatel klikne na tlačítko, systém vytvoří obdélník uprostřed kolem horkého místa kurzoru. Označuje také čas, kdy došlo k kliknutí. Když uživatel klikne na stejné tlačítko podruhé, systém určí, zda je aktivní bod stále uvnitř obdélníku, a vypočítá čas uplynulý od prvního kliknutí. Pokud je aktivní bod stále v obdélníku a uplynulý čas nepřekračuje hodnotu časového limitu poklikání, systém vygeneruje zprávu poklikání.

Aplikace může získat a nastavit hodnoty časového limitu poklikáním pomocí funkcí GetDoubleClickTime a SetDoubleClickTime. Případně může aplikace nastavit hodnotu časového limitu dvojitého kliknutí pomocí příznaku SPI_SETDOUBLECLICKTIME s funkcí SystemParametersInfo. Může také nastavit velikost obdélníku, který systém používá ke zjištění dvojitých kliknutí předáním SPI_SETDOUBLECLKWIDTH a SPI_SETDOUBLECLKHEIGHT příznaky SystemParametersInfo. Všimněte si však, že nastavení hodnoty časového limitu poklikání a obdélníku ovlivní všechny aplikace.

Okno definované aplikací ve výchozím nastavení nepřijímá zprávy poklikáním. Kvůli systémové režii spojené s generováním zpráv poklikáním se tyto zprávy generují pouze pro okna patřící do tříd, které mají styl třídy CS_DBLCLKS. Při registraci třídy okna musí vaše aplikace nastavit tento styl. Další informace naleznete v tématu Třídy oken.

Zpráva poklikání je vždy třetí zprávou v řadě čtyř zpráv. První dvě zprávy jsou zprávy spouštěné tlačítkem a tlačítkem nahoru vygenerované prvním kliknutím. Druhé kliknutí vygeneruje zprávu poklikání následovanou další zprávou o tlačítku. Například poklikáním na levé tlačítko myši se vygeneruje následující posloupnost zpráv:

  1. WM_LBUTTONDOWN
  2. WM_LBUTTONUP
  3. WM_LBUTTONDBLCLK
  4. WM_LBUTTONUP

Vzhledem k tomu, že okno před přijetím zprávy poklikáním vždy obdrží zprávu s tlačítkem dolů, aplikace obvykle používá zprávu poklikáním k rozšíření úkolu, který začal během zprávy s tlačítkem dolů. Když například uživatel klikne na barvu v paletě barev aplikace Microsoft Paint, Zobrazí Malování vybranou barvu vedle palety. Když uživatel dvakrát klikne na barvu, Malování zobrazí barvu a otevře dialogové okno Upravit barvy.

Zprávy myši mimo oblast jiného klienta

Okno obdrží zprávu myši mimo klientskou oblast, když dojde k události myši v jakékoli části okna s výjimkou klientské oblasti. Oblast bez klienta okna se skládá z ohraničení, řádku nabídek, záhlaví, posuvníku, nabídky okna, minimalizovaného tlačítka a tlačítka maximalizovat.

Systém generuje zprávy oblasti jiného typu než klient, a to především pro vlastní použití. Systém například používá zprávy oblasti bez klienta ke změně kurzoru na obousměrnou šipku, když se kurzor přesune na okraj okna. Okno musí předávat zprávy myši mimo klienty DefWindowProc funkce, aby bylo využití integrovaného rozhraní myši.

Pro každou zprávu myši klientské oblasti existuje odpovídající zpráva myši mimo klientskou oblast. Názvy těchto zpráv jsou podobné s tím rozdílem, že pojmenované konstanty pro zprávy oblasti bez klienta obsahují písmena NC. Například přesunutí kurzoru v oblasti jiného typu než klient vygeneruje WM_NCMOUSEMOVE zprávu a stisknutí levého tlačítka myši, zatímco kurzor je v oblasti bez klienta, vygeneruje zprávu WM_NCLBUTTONDOWN.

Parametr lParam zprávy myši mimoclient je struktura, která obsahuje souřadnice x a y místa kurzoru. Na rozdíl od souřadnic zpráv myši v oblasti klienta jsou souřadnice určené v souřadnicích obrazovky, nikoli v souřadnicích klienta. V souřadnicovém systému obrazovky jsou všechny body na obrazovce relativní vzhledem ke souřadnicům (0,0) v levém horním rohu obrazovky.

Parametr wParam obsahuje hodnotu hit-test, což označuje, kde v oblasti mimo klient došlo k události myši. Následující část vysvětluje účel hodnot testu hit-test.

Zpráva WM_NCHITTEST

Pokaždé, když dojde k události myši, systém odešle WM_NCHITTEST zprávu do okna, které obsahuje aktivní místo kurzoru nebo okno, které zachytilo myš. Systém tuto zprávu používá k určení, zda se má odeslat klientská oblast nebo zpráva myši mimo klient. Aplikace, která musí přijímat zprávy myši pohyb a tlačítko myši musí předat WM_NCHITTEST zprávu DefWindowProc funkce.

Parametr lParam zprávy WM_NCHITTEST obsahuje souřadnice obrazovky místa kurzoru. Funkce DefWindowProc prozkoumá souřadnice a vrátí hodnotu hit-test, která označuje umístění horkého místa. Hodnota hit-test může být jedna z následujících hodnot.

Hodnota Poloha horkého místa
HTBORDER V ohraničení okna, které nemá ohraničení velikosti.
HTBOTTOM Na vodorovném dolním okraji okna.
HTBOTTOMLEFT V levém dolním rohu ohraničení okna
HTBOTTOMRIGHT V pravém dolním rohu ohraničení okna
HTCAPTION V záhlaví.
HTCLIENT V klientské oblasti.
HTCLOSE V tlačítko Zavřít.
HTERROR Na pozadí obrazovky nebo na dělicí čáře mezi okny (stejně jako HTNOWHERE, s tím rozdílem, že funkce DefWindowProc vytvoří systémové pípnutí označující chybu).
HTGROWBOX V poli velikosti (stejné jako HTSIZE).
HTHELP Na tlačítku nápovědy.
HTHSCROLL Na vodorovném posuvníku.
HTLEFT Na levém okraji okna.
HTMENU V nabídce.
HTMAXBUTTON V tlačítko Maximalizovat
HTMINBUTTON V tlačítko Minimalizovat
HTNOWHERE Na pozadí obrazovky nebo na dělicí čáře mezi okny.
HTREDUCE V tlačítko Minimalizovat
HTRIGHT Na pravém okraji okna.
HTSIZE Do pole velikosti (stejné jako HTGROWBOX).
HTSYSMENU V nabídce System nebo v tlačítko Zavřít v podřízené okně.
HTTOP Na vodorovném horním okraji okna.
HTTOPLEFT V levém horním rohu ohraničení okna
HTTOPRIGHT V pravém horním rohu ohraničení okna.
HTTRANSPARENT V okně, které je aktuálně pokryto jiným oknem ve stejném vlákně.
HTVSCROLL Ve svislém posuvníku.
HTZOOM V tlačítko Maximalizovat

 

Pokud je kurzor v klientské oblasti okna, DefWindowProc vrátí HTCLIENT hodnotu hit-test do procedury okna. Když procedura okna vrátí tento kód do systému, systém převede souřadnice obrazovky kurzoru na souřadnice klienta a pak publikuje příslušnou zprávu myši oblasti klienta.

Funkce DefWindowProc vrátí jednu z ostatních hodnot hit-test, pokud je kurzor v oblasti bez klienta. Když procedura okna vrátí jednu z těchto hodnot hit-test, systém zveřejní zprávu myši mimo klient oblasti, umístění hodnoty hit-test do wParam parametru a kurzor souřadnice v lParam parametru.

Sonar myši

Funkce usnadnění myši Sonar krátce zobrazuje několik soustředných kruhů kolem ukazatele, když uživatel stiskne a uvolní klávesu CTRL. Tato funkce pomáhá uživateli najít ukazatel myši na obrazovce, která je nepřehledná nebo je nastavená na vysoké rozlišení, na nízké kvalitě monitoru nebo pro uživatele s poruchou zraku. Další informace naleznete v následujících příznakech v SystemParametersInfo:

SPI_GETMOUSESONAR

SPI_SETMOUSESONAR

Myš zmizí

Funkce přístupnosti myši zmizí, když uživatel píše, skryje ukazatel. Ukazatel myši se znovu zobrazí, když uživatel přesune myš. Tato funkce zachová ukazatel před zakrýváním zadaného textu, například v e-mailu nebo jiném dokumentu. Další informace naleznete v následujících příznakech v SystemParametersInfo:

SPI_GETMOUSEVANISH

SPI_SETMOUSEVANISH

Kolečko myši

Kolečko myši kombinuje funkce kolečka a tlačítka myši. Kolečko má diskrétní, rovnoměrně rozsaděné zářezy. Když kolečko otočíte, pošle se do aplikace zpráva o kolečku, protože se narazí na každý zářez. Tlačítko kolečka může fungovat také jako normální tlačítko windows uprostřed (třetí). Stisknutím a uvolněním kolečka myši se odesílají standardní WM_MBUTTONUP a WM_MBUTTONDOWN zprávy. Poklikáním na třetí tlačítko odešlete standardní WM_MBUTTONDBLCLK zprávu.

Kolečko myši je podporováno prostřednictvím zprávy WM_MOUSEWHEEL.

Otočením myši odešlete WM_MOUSEWHEEL zprávu do okna fokusu. Funkce DefWindowProc rozšíří zprávu do nadřazeného objektu okna. Zpráva by neměla obsahovat žádné interní přeposílání, protože DefWindowProc ho rozšíří do nadřazeného řetězce, dokud se nenajde okno, které ji zpracuje.

Určení počtu čar posouvání

Aplikace by měly použít funkci SystemParametersInfo k načtení počtu řádků, které dokument posunuje pro každou operaci posouvání (kolový zářez). Pokud chcete načíst počet řádků, aplikace provede následující volání:

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

Proměnná pulScrollLines odkazuje na celočíselnou hodnotu bez znaménka, která obdrží navrhovaný počet řádků, které se mají posouvat při otáčení kolečka myši bez modifikačních kláves:

  • Pokud je toto číslo 0, nemělo by dojít k žádnému posouvání.
  • Pokud je toto číslo WHEEL_PAGESCROLL, měl by se kolečko interpretovat tak, že kliknete jednou na stránce dolů nebo v oblastech nahoru na posuvníku.
  • Pokud je počet řádků, které se mají posunout, větší než počet zobrazených řádků, měla by být operace posouvání interpretována také jako operace page down nebo page up.

Výchozí hodnota pro počet čar posouvání bude 3. Pokud uživatel změní počet posuvníků pomocí listu Vlastnosti myši v Ovládacích panelech, operační systém vysílá zprávu WM_SETTINGCHANGE do všech oken nejvyšší úrovně se zadaným SPI_SETWHEELSCROLLLINES. Když aplikace obdrží WM_SETTINGCHANGE zprávu, může získat nový počet posuvníků voláním:

SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)

Ovládací prvky, které se posunou

Následující tabulka uvádí ovládací prvky s funkcemi posouvání (včetně posuvníků nastavených uživatelem).

Řízení Rolování
Upravit ovládací prvek Svislé a vodorovné.
Ovládací prvek Seznam Svislé a vodorovné.
Seznamem Pokud není vyřazeno, každý posuvník načte další nebo předchozí položku. Při vyřazení se každá zpráva posune dopředu do seznamu, který se odpovídajícím způsobem posune.
CMD (příkazový řádek) Vertikální.
Stromové zobrazení Svislé a vodorovné.
Zobrazení seznamu Svislé a vodorovné.
Posouvání nahoru/dolů Jedna položka najednou.
Posuvníky trackbaru Jedna položka najednou.
Microsoft Rich Edit 1.0 Vertikální. Všimněte si, že klient Exchange má své vlastní verze ovládacích prvků zobrazení seznamu a stromového zobrazení, které nemají podporu kolečka.
Microsoft Rich Edit 2.0 Vertikální.

 

Detekce myši pomocí kolečka

Chcete-li zjistit, zda je myš s kolečkem připojena, zavolejte GetSystemMetrics s SM_MOUSEWHEELPRESENT. Návratová hodnota TRUE označuje, že myš je připojena.

Následující příklad je z okna procedury pro víceřádkové úpravy ovládacího prvku:

BOOL ScrollLines(
     PWNDDATA pwndData,   //scrolls the window indicated
     int cLinesToScroll); //number of times

short gcWheelDelta; //wheel delta from roll
PWNDDATA pWndData; //pointer to structure containing info about the window
UINT gucWheelScrollLines=0;//number of lines to scroll on a wheel rotation

gucWheelScrollLines = SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 
                             0, 
                             pulScrollLines, 
                             0);

case WM_MOUSEWHEEL:
    /*
     * Do not handle zoom and datazoom.
     */
    if (wParam & (MK_SHIFT | MK_CONTROL)) {
        goto PassToDefaultWindowProc;
    }

    gcWheelDelta -= (short) HIWORD(wParam);
    if (abs(gcWheelDelta) >= WHEEL_DELTA && gucWheelScrollLines > 0) 
    {
        int cLineScroll;

        /*
         * Limit a roll of one (1) WHEEL_DELTA to
         * scroll one (1) page.
         */
        cLineScroll = (int) min(
                (UINT) pWndData->ichLinesOnScreen - 1,
                gucWheelScrollLines);

        if (cLineScroll == 0) {
            cLineScroll++;
        }

        cLineScroll *= (gcWheelDelta / WHEEL_DELTA);
        assert(cLineScroll != 0);

        gcWheelDelta = gcWheelDelta % WHEEL_DELTA;
        return ScrollLines(pWndData, cLineScroll);
    }

    break;

Aktivace okna

Když uživatel klikne na neaktivní okno nejvyšší úrovně nebo podřízené okno neaktivního okna nejvyšší úrovně, systém odešle zprávu WM_MOUSEACTIVATE (mimo jiné) do nejvyšší úrovně nebo podřízeného okna. Systém odešle tuto zprávu po odeslání zprávy WM_NCHITTEST do okna, ale před publikováním zprávy s tlačítkem dolů. Když se WM_MOUSEACTIVATE předá funkci DefWindowProc, systém aktivuje okno nejvyšší úrovně a potom odešle zprávu dolů do horní úrovně nebo podřízeného okna.

Zpracováním WM_MOUSEACTIVATEmůže okno určit, zda se okno nejvyšší úrovně stane aktivním oknem v důsledku kliknutí myší a zda okno, na které bylo kliknuto, obdrží následující zprávu o tlačítku dolů. Provede to vrácením jedné z následujících hodnot po zpracování WM_MOUSEACTIVATE.

Hodnota Význam
MA_ACTIVATE Aktivuje okno a nezahodí zprávu myši.
MA_NOACTIVATE Neaktivuje okno a nezahodí zprávu myši.
MA_ACTIVATEANDEAT Aktivuje okno a zahodí zprávu myši.
MA_NOACTIVATEANDEAT Neaktivuje okno, ale zahodí zprávu myši.

Viz také

využití pohybu myši High-Definition