Översikt över musindata
Musen är en viktig, men valfri, användarindataenhet för program. Ett välskrivet program bör innehålla ett musgränssnitt, men det bör inte enbart bero på musen för att hämta användarindata. Programmet bör också ge fullständigt tangentbordsstöd.
Ett program tar emot musindata i form av meddelanden som skickas eller skickas till dess fönster.
Det här avsnittet beskriver följande avsnitt:
- musmarkör
- Mouse Capture
- Muskonfiguration
- XBUTTON-
- musmeddelanden
- Mus ekolod
- musen försvinner
- Mushjulet
- aktivering av fönster
Muspekaren
När användaren flyttar musen flyttas en bitmapp på skärmen med namnet musmarkören. Musmarkören innehåller en punkt med en pixel som kallas hot spot, en punkt som systemet spårar och känner igen som markörens position. När en mushändelse inträffar tar fönstret som innehåller den aktiva platsen vanligtvis emot musmeddelandet från händelsen. Fönstret behöver inte vara aktivt eller ha tangentbordsfokus för att ta emot ett musmeddelande.
Systemet har en variabel som styr mushastigheten, dvs. avståndet markören rör sig när användaren flyttar musen. Du kan använda funktionen SystemParametersInfo med flaggan SPI_GETMOUSE eller SPI_SETMOUSE för att hämta eller ange mushastighet. Mer information om musmarkörer finns i cursors.
Musfångst
Systemet publicerar vanligtvis ett musmeddelande i fönstret som innehåller markörens frekventa punkt när en mushändelse inträffar. Ett program kan ändra det här beteendet med hjälp av funktionen SetCapture för att dirigera musmeddelanden till ett visst fönster. Fönstret tar emot alla musmeddelanden tills programmet anropar funktionen ReleaseCapture eller anger ett annat avbildningsfönster, eller tills användaren klickar på ett fönster som skapats av en annan tråd.
När musinsamlingen ändras skickar systemet ett WM_CAPTURECHANGED meddelande till fönstret som förlorar musfångsten. Parametern lParam i meddelandet anger ett handtag till fönstret som samlar in musen.
Endast förgrundsfönstret kan samla in musindata. När ett bakgrundsfönster försöker samla in musindata tar det bara emot meddelanden för mushändelser som inträffar när markörens frekventa punkt ligger inom den synliga delen av fönstret.
Att samla in musindata är användbart om ett fönster måste ta emot alla musindata, även när markören flyttas utanför fönstret. Ett program spårar till exempel vanligtvis markörens position efter en ned musknappshändelse och följer markören tills en händelse för upp musknapp inträffar. Om ett program inte har samlat in musindata och användaren släpper musknappen utanför fönstret, får inte fönstret knappuppringningsmeddelandet.
En tråd kan använda funktionen GetCapture för att avgöra om ett av dess fönster har fångat musen. Om ett av trådens fönster har fångat musen hämtar GetCapture ett handtag till fönstret.
Musklicklås
Med hjälpmedelsfunktionen För musklicklås kan en användare låsa den primära musknappen efter ett enda klick. För ett program verkar knappen fortfarande vara nedtryckt. Om du vill låsa upp knappen kan ett program skicka valfritt musmeddelande eller så kan användaren klicka på valfri musknapp. Med den här funktionen kan en användare göra komplexa muskombinationer enklare. Till exempel kan de med vissa fysiska begränsningar markera text, dra objekt eller öppna menyer enklare. Mer information finns i följande flaggor och kommentarer i SystemParametersInfo:
- SPI_GETMOUSECLICKLOCK
- SPI_SETMOUSECLICKLOCK
- SPI_GETMOUSECLICKLOCKTIME
- SPI_SETMOUSECLICKLOCKTIME
Muskonfiguration
Även om musen är en viktig indataenhet för program, har inte alla användare nödvändigtvis en mus. Ett program kan avgöra om systemet innehåller en mus genom att skicka SM_MOUSEPRESENT-värdet till funktionen GetSystemMetrics.
Windows har stöd för en mus med upp till tre knappar. På en treknappsmus är knapparna avsedda som vänster-, mitten- och högerknappar. Meddelanden och namngivna konstanter som är relaterade till musknapparna använder bokstäverna L, M och R för att identifiera knapparna. Knappen på en mus med en knapp anses vara den vänstra knappen. Även om Windows stöder en mus med flera knappar använder de flesta program den vänstra knappen främst och de andra minimalt, om alls.
Program kan också stödja ett mushjul. Mushjulet kan tryckas eller roteras. När mushjulet trycks in fungerar det som mittenknappen (tredje) och skickar vanliga mellanknappsmeddelanden till ditt program. När den roteras skickas ett hjulmeddelande till ditt program. Mer information finns i avsnittet Mushjulet.
Program kan ha stöd för programkommandoknappar. Dessa knappar, som kallas antingen XBUTTON1 eller XBUTTON2, är utformade för att ge enklare åtkomst till en webbläsare, e-post och medietjänster. När XBUTTON1 eller XBUTTON2 trycks på skickas ett WM_APPCOMMAND meddelande till ditt program. Mer information finns i beskrivningen i meddelandet WM_APPCOMMAND.
Ett program kan fastställa antalet knappar på musen genom att skicka värdet SM_CMOUSEBUTTONS till funktionen GetSystemMetrics. För att konfigurera musen för en vänsterhänt användare kan programmet använda funktionen SwapMouseButton för att vända innebörden av knapparna för vänster och höger mus. Att skicka SPI_SETMOUSEBUTTONSWAP-värdet till funktionen SystemParametersInfo är ett annat sätt att ändra innebörden av knapparna. Observera dock att musen är en delad resurs, så om du återställer innebörden av knapparna påverkas alla program.
XBUTTON
Windows stöder möss med upp till fem knappar: vänster, mitten och höger, plus två ytterligare knappar som kallas XBUTTON1 och XBUTTON2. Knapparna XBUTTON1 och XBUTTON2 finns ofta på sidorna av musen, nära basen. Dessa extra knappar finns inte på alla möss. Om de finns mappas knapparna XBUTTON1 och XBUTTON2 ofta till en programfunktion, till exempel framåt- och bakåtnavigering i en webbläsare.
Fönsterhanteraren stöder XBUTTON1 och XBUTTON2 via WM_XBUTTON* och WM_NCXBUTTON* meddelanden. HIWORD för WPARAM- i dessa meddelanden innehåller en flagga som anger vilken XBUTTON som trycktes på. Eftersom dessa musmeddelanden också passar mellan konstanterna WM_MOUSEFIRST och WM_MOUSELASTkan ett program filtrera alla musmeddelanden med GetMessage eller PeekMessage.
Följande stöd XBUTTON1 och XBUTTON2:
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX
Följande API:er har ändrats för att stödja dessa knappar:
Det är osannolikt att ett underordnat fönster i ett komponentprogram kommer att kunna implementera kommandon för XBUTTON1 och XBUTTON2 direkt. Så DefWindowProc skickar ett WM_APPCOMMAND meddelande till ett fönster när antingen XBUTTON1 eller XBUTTON2 klickas. DefWindowProc skickar även WM_APPCOMMAND-meddelandet till det överordnade fönstret. Detta liknar hur snabbmenyer anropas med ett högerklick–DefWindowProc- skickar ett WM_CONTEXTMENU meddelande till menyn och skickar det även till dess överordnade. Om DefWindowProc tar emot ett WM_APPCOMMAND meddelande för ett fönster på den översta nivån anropas dessutom en gränssnittskrok med kod HSHELL_APPCOMMAND.
Det finns stöd för tangentbord som har extra nycklar för webbläsarfunktioner, mediefunktioner, programstart och energisparfunktioner. Mer information finns i tangentbordstangenter för surfning och andra funktioner.
Musmeddelanden
Musen genererar en indatahändelse när användaren flyttar musen, trycker eller släpper en musknapp. Systemet konverterar musindatahändelser till meddelanden och skickar dem till rätt tråds meddelandekö. När musmeddelanden publiceras snabbare än en tråd kan bearbeta dem, tar systemet bort alla utom det senaste musmeddelandet.
Ett fönster tar emot ett musmeddelande när en mushändelse inträffar när markören befinner sig inom fönstrets kantlinjer eller när fönstret har fångat musen. Musmeddelanden är indelade i två grupper: klientområdesmeddelanden och icke-tillfälliga områdesmeddelanden. Vanligtvis bearbetar ett program klientområdesmeddelanden och ignorerar icke-tillfälliga områdesmeddelanden.
Det här avsnittet beskriver följande avsnitt:
Musmeddelanden för klientområde
Ett fönster tar emot ett musmeddelande för klientområdet när en mushändelse inträffar i fönstrets klientområde. Systemet skickar WM_MOUSEMOVE meddelandet till fönstret när användaren flyttar markören inom klientområdet. Det publicerar ett av följande meddelanden när användaren trycker på eller släpper en musknapp medan markören är inom klientområdet.
Meddelande | Betydelse |
---|---|
WM_LBUTTONDBLCLK | Den vänstra musknappen dubbelklickades. |
WM_LBUTTONDOWN | Vänster musknapp trycktes på. |
WM_LBUTTONUP | Den vänstra musknappen släpptes. |
WM_MBUTTONDBLCLK | Den mellersta musknappen dubbelklickades. |
WM_MBUTTONDOWN | Den mellersta musknappen trycktes. |
WM_MBUTTONUP | Den mellersta musknappen släpptes. |
WM_RBUTTONDBLCLK | Den högra musknappen dubbelklickades. |
WM_RBUTTONDOWN | Höger musknapp trycktes på. |
WM_RBUTTONUP | Den högra musknappen släpptes. |
WM_XBUTTONDBLCLK | En X-musknapp dubbelklickades. |
WM_XBUTTONDOWN | En X-musknapp trycktes in. |
WM_XBUTTONUP | En X-musknapp släpptes. |
Dessutom kan ett program anropa funktionen TrackMouseEvent för att låta systemet skicka två andra meddelanden. Det publicerar WM_MOUSEHOVER meddelande när markören hovrar över klientområdet under en viss tidsperiod. Det publicerar WM_MOUSELEAVE meddelande när markören lämnar klientområdet.
Meddelandeparametrar
Parametern lParam för ett klientområdesmusmeddelande anger positionen för markörens snabbpunkt. Lågordningsordet anger x-koordinaten för den aktiva punkten, och högordningsordet anger y-koordinaten. Koordinaterna anges i klientkoordinater. I klientkoordinatsystemet anges alla punkter på skärmen i förhållande till koordinaterna (0,0) i det övre vänstra hörnet i klientområdet.
Parametern wParam innehåller flaggor som anger status för de andra musknapparna och CTRL- och SKIFT-tangenterna vid tidpunkten för mushändelsen. Du kan söka efter dessa flaggor när bearbetning av musmeddelanden beror på tillståndet för en annan musknapp eller CTRL- eller SKIFT-tangenten. Parametern wParam kan vara en kombination av följande värden.
Värde | Beskrivning |
---|---|
MK_CONTROL | CTRL-tangenten är nere. |
MK_LBUTTON | Vänster musknapp är nere. |
MK_MBUTTON | Den mellersta musknappen är nere. |
MK_RBUTTON | Höger musknapp är nere. |
MK_SHIFT | SKIFT-nyckeln är nere. |
MK_XBUTTON1 | XBUTTON1 är nere. |
MK_XBUTTON2 | XBUTTON2 är nere. |
Double-Click meddelanden
Systemet genererar ett dubbelklicksmeddelande när användaren klickar på en musknapp två gånger i snabb följd. När användaren klickar på en knapp upprättar systemet en rektangel centrerad runt markörens frekventa punkt. Det markerar också tidpunkten då klicket inträffade. När användaren klickar på samma knapp en andra gång avgör systemet om den aktiva platsen fortfarande ligger inom rektangeln och beräknar den tid som förflutit sedan det första klicket. Om den aktiva platsen fortfarande ligger inom rektangeln och den förflutna tiden inte överskrider tidsgränsvärdet för dubbelklicka genererar systemet ett dubbelklicksmeddelande.
Ett program kan hämta och ange timeout-värden för dubbelklicka med hjälp av funktionerna GetDoubleClickTime och SetDoubleClickTime. Du kan också ange värdet för dubbelklicka–timeout med hjälp av flaggan SPI_SETDOUBLECLICKTIME med funktionen SystemParametersInfo. Den kan också ange storleken på den rektangel som systemet använder för att identifiera dubbelklick genom att skicka SPI_SETDOUBLECLKWIDTH- och SPI_SETDOUBLECLKHEIGHT-flaggorna till SystemParametersInfo. Observera dock att inställningen av värdet för dubbelklick och timeout och rektangel påverkar alla program.
Ett programdefinierat fönster tar som standard inte emot dubbelklicksmeddelanden. På grund av systemets omkostnader för att generera dubbelklicksmeddelanden genereras dessa meddelanden endast för fönster som tillhör klasser som har CS_DBLCLKS klassformat. Ditt program måste ange det här formatet när du registrerar fönsterklassen. Mer information finns i fönsterklasser.
Ett dubbelklicksmeddelande är alltid det tredje meddelandet i en serie med fyra meddelanden. De första två meddelandena är de knapp-ned- och knapp-upp-meddelanden som genereras av det första klicket. Det andra klicket genererar dubbelklicksmeddelandet följt av ett annat knapp-up-meddelande. Om du till exempel dubbelklickar på den vänstra musknappen genereras följande meddelandesekvens:
Eftersom ett fönster alltid tar emot ett knapp-ned-meddelande innan det får ett dubbelklicksmeddelande, använder ett program vanligtvis ett dubbelklicksmeddelande för att utöka en uppgift som startades under ett knapp-ned-meddelande. När användaren till exempel klickar på en färg i färgpaletten i Microsoft Paint visar Paint den valda färgen bredvid paletten. När användaren dubbelklickar på en färg visar Paint färgen och öppnar dialogrutan Redigera färger.
Meddelanden om icke-tillfälliga områdesmuser
Ett fönster tar emot ett meddelande om icke-hållen områdesmus när en mushändelse inträffar i någon del av ett fönster utom klientområdet. Ett fönsters icke-tillfälliga område består av dess kantlinje, menyrad, namnlist, rullningslist, fönstermeny, minimera knapp och maximera knapp.
Systemet genererar icke-tillfälliga områdesmeddelanden främst för eget bruk. Systemet använder till exempel icke-tillfälliga områdesmeddelanden för att ändra markören till en tvåhövdad pil när markörens hot spot flyttas till ett fönsters kantlinje. Ett fönster måste skicka meddelanden om icke-hållna områdesmuser till funktionen DefWindowProc för att dra nytta av det inbyggda musgränssnittet.
Det finns ett motsvarande icke-tillfälliga områdesmusmeddelande för varje klientområdesmusmeddelande. Namnen på dessa meddelanden är liknande förutom att de namngivna konstanterna för de icke-givna områdesmeddelandena innehåller bokstäverna NC. Om du till exempel flyttar markören i det icke-tillfälliga området genereras ett WM_NCMOUSEMOVE meddelande, och om du trycker på den vänstra musknappen medan markören är i det icke-tillfälliga området genereras ett WM_NCLBUTTONDOWN meddelande.
Parametern lParam för ett icke-kliientområdesmusmeddelande är en struktur som innehåller x- och y-koordinaterna för markörens frekventa punkt. Till skillnad från koordinater för meddelanden om klientområdesmus anges koordinaterna i skärmkoordinater i stället för klientkoordinater. I skärmkoordinatsystemet är alla punkter på skärmen relativa till koordinaterna (0,0) i det övre vänstra hörnet på skärmen.
Parametern wParam innehåller ett träfftestvärde, ett värde som anger var i det icke-tillfälliga området mushändelsen inträffade. I följande avsnitt beskrivs syftet med träfftestvärden.
Meddelandet WM_NCHITTEST
När en mushändelse inträffar skickar systemet ett WM_NCHITTEST meddelande till antingen fönstret som innehåller markörens frekventa plats eller det fönster som har fångat musen. Systemet använder det här meddelandet för att avgöra om ett klientområde eller ett icke-exklusivt områdesmusmeddelande ska skickas. Ett program som måste ta emot meddelanden om musrörelser och musknappar måste skicka WM_NCHITTEST-meddelandet till funktionen DefWindowProc.
Parametern lParam i WM_NCHITTEST-meddelandet innehåller skärmkoordinaterna för markörens hot spot. Funktionen DefWindowProc undersöker koordinaterna och returnerar ett träfftestvärde som anger platsen för den aktiva platsen. Träfftestvärdet kan vara ett av följande värden.
Värde | Plats för hot spot |
---|---|
HTBORDER- | I kantlinjen för ett fönster som inte har en storleksgräns. |
HTBOTTOM- | I fönstrets nedre vågräta kantlinje. |
HTBOTTOMLEFT | I det nedre vänstra hörnet av en fönsterkantlinje. |
HTBOTTOMRIGHT | I det nedre högra hörnet av en fönsterkantlinje. |
HTCAPTION | I ett namnlist. |
HTCLIENT | I ett klientområde. |
HTCLOSE | I en knappen Stäng. |
HTERROR | På skärmens bakgrund eller på en skiljelinje mellan fönster (samma som HTNOWHERE, förutom att funktionen DefWindowProc genererar en systemsignal för att indikera ett fel). |
HTGROWBOX- | I en storleksruta (samma som HTSIZE-). |
HTHELP | I en knappen Hjälp. |
HTHSCROLL | I en vågrät rullningslist. |
HTLEFT- | I fönstrets vänstra kantlinje. |
HTMENU | I en meny. |
HTMAXBUTTON | I en knappen Maximera. |
HTMINBUTTON | I en knappen Minimera. |
HTNOWHERE | På skärmens bakgrund eller på en skiljelinje mellan fönster. |
HTREDUCE | I en knappen Minimera. |
HTRIGHT | I fönstrets högra kantlinje. |
HTSIZE | I en storleksruta (samma som HTGROWBOX). |
HTSYSMENU | I en System-meny eller i en knappen Stäng i ett underordnat fönster. |
HTTOP- | I fönstrets övre vågräta kantlinje. |
HTTOPLEFT | I det övre vänstra hörnet av en fönsterkantlinje. |
HTTOPRIGHT | I det övre högra hörnet av en fönsterkantlinje. |
HTTRANSPARENT- | I ett fönster som för närvarande omfattas av ett annat fönster i samma tråd. |
HTVSCROLL | I den lodräta rullningslisten. |
HTZOOM | I en knappen Maximera. |
Om markören finns i klientområdet i ett fönster returnerar DefWindowProcHTCLIENT- träfftestvärde till fönsterproceduren. När fönsterproceduren returnerar den här koden till systemet konverterar systemet skärmkoordinaterna för markörens frekventa punkt till klientkoordinater och publicerar sedan lämpligt klientområdesmusmeddelande.
Funktionen DefWindowProc returnerar ett av de andra träfftestvärdena när markörens frekventa punkt ligger i ett fönsters icke-tillfälliga område. När fönsterproceduren returnerar något av dessa träfftestvärden publicerar systemet ett icke-giltigt områdesmusmeddelande och placerar träfftestvärdet i meddelandets wParam parameter och markörens koordinater i parametern lParam.
Mus ekolod
Hjälpmedelsfunktionen Mus ekolod visar kort flera koncentriska cirklar runt pekaren när användaren trycker på och släpper CTRL-tangenten. Den här funktionen hjälper en användare att hitta muspekaren på en skärm som är rörig eller med upplösningen inställd på hög, på en bildskärm av dålig kvalitet eller för användare med nedsatt syn. Mer information finns i följande flaggor i SystemParametersInfo:
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
Mus försvinner
Hjälpmedelsfunktionen Mouse Vanish döljer pekaren när användaren skriver. Muspekaren visas igen när användaren flyttar musen. Den här funktionen hindrar pekaren från att dölja texten som skrivs, till exempel i ett e-postmeddelande eller annat dokument. Mer information finns i följande flaggor i SystemParametersInfo:
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
Mushjulet
Mushjulet kombinerar funktionerna i ett hjul och en musknapp. Hjulet har diskreta, jämnt fördelade skåror. När du roterar hjulet skickas ett hjulmeddelande till ditt program eftersom varje snäcka påträffas. Hjulknappen kan också fungera som en vanlig Windows-mittenknapp (tredje). Om du trycker på och släpper mushjulet skickas standardmeddelanden för WM_MBUTTONUP och WM_MBUTTONDOWN. Om du dubbelklickar på den tredje knappen skickas standardmeddelandet WM_MBUTTONDBLCLK.
Mushjulet stöds via meddelandet WM_MOUSEWHEEL.
När du roterar musen skickas meddelandet WM_MOUSEWHEEL till fokusfönstret. Funktionen DefWindowProc sprider meddelandet till fönstrets överordnade. Det bör inte finnas någon intern vidarebefordran av meddelandet eftersom DefWindowProc sprider det i den överordnade kedjan tills ett fönster som bearbetar det hittas.
Fastställa antalet rullningslinjer
Program bör använda funktionen SystemParametersInfo för att hämta antalet rader som ett dokument rullar för varje rullningsåtgärd (hjulsnål). För att hämta antalet rader gör ett program följande anrop:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Variabeln "pulScrollLines" pekar på ett osignerat heltalsvärde som tar emot det föreslagna antalet rader som ska rullas när mushjulet roteras utan modifierarnycklar:
- Om det här talet är 0 ska ingen rullning ske.
- Om det här talet är WHEEL_PAGESCROLLska en hjulrulle tolkas som att klicka en gång i sidan nedåt eller sidupp i rullningslistens regioner.
- Om antalet rader som ska rullas är större än antalet rader som kan visas, bör rullningsåtgärden också tolkas som en ned- eller sidupprullningsåtgärd.
Standardvärdet för antalet rullningslinjer är 3. Om en användare ändrar antalet rullningslinjer sänder operativsystemet med hjälp av bladet Musegenskaper i Kontrollpanelen ett WM_SETTINGCHANGE meddelande till alla fönster på den översta nivån med SPI_SETWHEELSCROLLLINES angivet. När ett program tar emot meddelandet WM_SETTINGCHANGE kan det sedan hämta det nya antalet rullningslinjer genom att anropa:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Kontroller som rullar
Tabellen nedan visar kontroller med rullningsfunktioner (inklusive rullningslinjer som angetts av användaren).
Kontroll | Rullning |
---|---|
Redigera kontroll | Lodrätt och vågrätt. |
Listrutekontroll | Lodrätt och vågrätt. |
Kombinationsfält | När den inte tappas ned hämtar varje rullning nästa eller föregående objekt. När de tappas ned vidarebefordrar varje rullning meddelandet till listrutan, som rullar därefter. |
CMD (kommandorad) | Vertikal. |
Trädvy | Lodrätt och vågrätt. |
Listvy | Lodrätt och vågrätt. |
Upp-/nedrullningslister | Ett objekt i taget. |
Bläddringslist | Ett objekt i taget. |
Microsoft Rich Edit 1.0 | Vertikal. Observera att Exchange-klienten har sina egna versioner av listvyn och trädvisningskontrollerna som inte har hjulstöd. |
Microsoft Rich Edit 2.0 | Vertikal. |
Identifiera en mus med ett hjul
Om du vill ta reda på om en mus med ett hjul är ansluten anropar du GetSystemMetrics med SM_MOUSEWHEELPRESENT. Ett returvärde för TRUE- anger att musen är ansluten.
Följande exempel är från fönsterproceduren för en redigeringskontroll med flera rader:
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;
Fönsteraktivering
När användaren klickar på ett inaktivt fönster på den översta nivån eller det underordnade fönstret i ett inaktivt fönster på den översta nivån skickar systemet WM_MOUSEACTIVATE meddelandet (bland annat) till det översta eller underordnade fönstret. Systemet skickar det här meddelandet efter att det WM_NCHITTEST meddelandet har publicerats i fönstret, men innan du publicerar knapp-ned-meddelandet. När WM_MOUSEACTIVATE skickas till funktionen DefWindowProc aktiverar systemet fönstret på den översta nivån och skickar sedan knapp-ned-meddelandet till det översta eller underordnade fönstret.
Genom att bearbeta WM_MOUSEACTIVATEkan ett fönster styra om fönstret på den översta nivån blir det aktiva fönstret till följd av ett musklick och om fönstret som klickades tar emot det efterföljande knapp-ned-meddelandet. Det gör det genom att returnera något av följande värden efter bearbetningen WM_MOUSEACTIVATE.
Värde | Betydelse |
---|---|
MA_ACTIVATE | Aktiverar fönstret och tar inte bort musmeddelandet. |
MA_NOACTIVATE | Aktiverar inte fönstret och tar inte bort musmeddelandet. |
MA_ACTIVATEANDEAT | Aktiverar fönstret och tar bort musmeddelandet. |
MA_NOACTIVATEANDEAT | Aktiverar inte fönstret men tar bort musmeddelandet. |