Overzicht van muisinvoer
De muis is een belangrijk, maar optioneel apparaat voor gebruikersinvoer voor toepassingen. Een goed geschreven toepassing moet een muisinterface bevatten, maar deze mag niet alleen afhankelijk zijn van de muis voor het verkrijgen van gebruikersinvoer. De toepassing moet ook volledige toetsenbordondersteuning bieden.
Een toepassing ontvangt muisinvoer in de vorm van berichten die naar de vensters worden verzonden of gepost.
In deze sectie worden de volgende onderwerpen behandeld:
- muiscursor
- Mouse Capture-
- Muisklikslot
- muisconfiguratie
- XBUTTON's
- muisberichten
- muis sonar
- muis
- het muiswiel
- vensteractivering
Muiscursor
Wanneer de gebruiker de muis beweegt, verplaatst het systeem een bitmap op het scherm met de naam muiscursor. De muiscursor bevat een punt met één pixel, de zogenaamde hot spot, een punt dat door het systeem wordt bijgehouden en herkend als de positie van de cursor. Wanneer er een muis gebeurtenis optreedt, ontvangt het venster dat de hot spot bevat doorgaans het muisbericht dat het gevolg is van de gebeurtenis. Het venster hoeft niet actief te zijn of de toetsenbordfocus te hebben om een muisbericht te ontvangen.
Het systeem onderhoudt een variabele waarmee de muissnelheid wordt bestuurd. De afstand die de cursor beweegt wanneer de gebruiker de muis beweegt. U kunt de functie SystemParametersInfo met de SPI_GETMOUSE of SPI_SETMOUSE vlag gebruiken om de muissnelheid op te halen of in te stellen. Zie Cursorsvoor meer informatie over muiscursors.
Muisopname
Het systeem plaatst meestal een muisbericht in het venster met de cursor-hot spot wanneer een muis gebeurtenis optreedt. Een toepassing kan dit gedrag wijzigen met behulp van de functie SetCapture om muisberichten naar een specifiek venster te routeren. Het venster ontvangt alle muisberichten totdat de toepassing de ReleaseCapture functie aanroept of een ander opnamevenster opgeeft, of totdat de gebruiker op een venster klikt dat is gemaakt door een andere thread.
Wanneer de muis wordt vastgelegd, verzendt het systeem een WM_CAPTURECHANGED bericht naar het venster dat de muisopname verliest. De parameter lParam van het bericht geeft een ingang op voor het venster waarmee de muis wordt vastgelegd.
Alleen het voorgrondvenster kan muisinvoer vastleggen. Wanneer een achtergrondvenster probeert de invoer van de muis vast te leggen, ontvangt het alleen berichten voor muis-gebeurtenissen die optreden wanneer de cursor-hot spot zich in het zichtbare gedeelte van het venster bevindt.
Het vastleggen van muisinvoer is handig als een venster alle muisinvoer moet ontvangen, zelfs wanneer de cursor buiten het venster wordt verplaatst. Een toepassing houdt bijvoorbeeld meestal de cursorpositie bij na een gebeurtenis met de muisknop omlaag, gevolgd door de cursor totdat een gebeurtenis met de muisknop omhoog plaatsvindt. Als een toepassing geen muisinvoer heeft vastgelegd en de gebruiker de muisknop buiten het venster loslaat, ontvangt het venster het bericht niet.
Een thread kan de functie GetCapture gebruiken om te bepalen of een van de vensters de muis heeft vastgelegd. Als een van de vensters van de thread de muis heeft vastgelegd, haalt GetCapture een ingang naar het venster op.
Muis ClickLock
Met de toegankelijkheidsfunctie Mouse ClickLock kan een gebruiker de primaire muisknop vergrendelen na één klik. Voor een toepassing lijkt de knop nog steeds ingedrukt te zijn. Als u de knop wilt ontgrendelen, kan een toepassing een muisbericht verzenden of kan de gebruiker op een willekeurige muisknop klikken. Met deze functie kan een gebruiker complexere combinaties van muiss uitvoeren. Mensen met bepaalde fysieke beperkingen kunnen bijvoorbeeld gemakkelijker tekst markeren, objecten slepen of menu's openen. Zie de volgende vlaggen en de Opmerkingen in SystemParametersInfovoor meer informatie:
- SPI_GETMOUSECLICKLOCK
- SPI_SETMOUSECLICKLOCK
- SPI_GETMOUSECLICKLOCKTIME
- SPI_SETMOUSECLICKLOCKTIME
Configuratie van muis
Hoewel de muis een belangrijk invoerapparaat is voor toepassingen, heeft niet elke gebruiker noodzakelijkerwijs een muis. Een toepassing kan bepalen of het systeem een muis bevat door de SM_MOUSEPRESENT waarde door te geven aan de functie GetSystemMetrics.
Windows ondersteunt een muis met maximaal drie knoppen. Op een muis met drie knoppen worden de knoppen aangewezen als de linker-, middelste en rechterknoppen. Berichten en benoemde constanten met betrekking tot de muisknoppen gebruiken de letters L, M en R om de knoppen te identificeren. De knop op een muis met één knop wordt beschouwd als de linkerknop. Hoewel Windows ondersteuning biedt voor een muis met meerdere knoppen, gebruiken de meeste toepassingen voornamelijk de linkerknop en de andere minimaal, indien helemaal niet.
Toepassingen kunnen ook een muiswiel ondersteunen. Het muiswiel kan worden ingedrukt of gedraaid. Wanneer het muiswiel wordt ingedrukt, fungeert het als de middelste (derde) knop, waarmee normale middelste knopberichten naar uw toepassing worden verzonden. Wanneer het wordt gedraaid, wordt er een wielbericht verzonden naar uw toepassing. Zie de sectie Muiswiel voor meer informatie.
Toepassingen kunnen knoppen voor toepassingsopdrachten ondersteunen. Deze knoppen, XBUTTON1 of XBUTTON2 genoemd, zijn ontworpen om eenvoudiger toegang te bieden tot een internetbrowser, elektronische e-mail en mediaservices. Wanneer XBUTTON1 of XBUTTON2 wordt ingedrukt, wordt er een WM_APPCOMMAND bericht naar uw toepassing verzonden. Zie de beschrijving in het WM_APPCOMMAND bericht voor meer informatie.
Een toepassing kan het aantal knoppen op de muis bepalen door de SM_CMOUSEBUTTONS waarde door te geven aan de functie GetSystemMetrics. Als u de muis wilt configureren voor een linkshandige gebruiker, kan de toepassing de functie SwapMouseButton gebruiken om de betekenis van de linker- en rechtermuisknoppen om te keren. Het doorgeven van de SPI_SETMOUSEBUTTONSWAP waarde aan de functie SystemParametersInfo is een andere manier om de betekenis van de knoppen om te keren. Houd er echter rekening mee dat de muis een gedeelde resource is, dus het omkeren van de betekenis van de knoppen is van invloed op alle toepassingen.
XBUTTON's
Windows ondersteunt muizen met maximaal vijf knoppen: links, midden en rechts, plus twee extra knoppen genaamd XBUTTON1 en XBUTTON2. De knoppen XBUTTON1 en XBUTTON2 bevinden zich vaak aan de zijkanten van de muis, in de buurt van de basis. Deze extra knoppen zijn niet aanwezig op alle muizen. Indien aanwezig, worden de knoppen XBUTTON1 en XBUTTON2 vaak toegewezen aan een toepassingsfunctie, zoals vooruit- en achteruitnavigatie in een webbrowser.
Het vensterbeheer ondersteunt XBUTTON1 en XBUTTON2 via de WM_XBUTTON* en WM_NCXBUTTON* berichten. Het HIWORD van de WPARAM in deze berichten bevat een vlag die aangeeft welke XBUTTON is ingedrukt. Omdat deze muisberichten ook passen tussen de constanten WM_MOUSEFIRST en WM_MOUSELAST, kan een toepassing alle muisberichten filteren met GetMessage- of PeekMessage-.
De volgende ondersteuning XBUTTON1 en XBUTTON2:
- WM_APPCOMMAND
- WM_NCXBUTTONDBLCLK
- WM_NCXBUTTONDOWN
- WM_NCXBUTTONUP
- WM_XBUTTONDBLCLK
- WM_XBUTTONDOWN
- WM_XBUTTONUP
- MOUSEHOOKSTRUCTEX-
De volgende API's zijn gewijzigd ter ondersteuning van deze knoppen:
Het is onwaarschijnlijk dat een onderliggend venster in een onderdeeltoepassing rechtstreeks opdrachten kan implementeren voor de XBUTTON1 en XBUTTON2. Dus DefWindowProc- een WM_APPCOMMAND bericht naar een venster verzendt wanneer op XBUTTON1 of XBUTTON2 wordt geklikt. DefWindowProc- verzendt ook het WM_APPCOMMAND bericht naar het bovenliggende venster. Dit is vergelijkbaar met de manier waarop contextmenu's worden aangeroepen met een rechtermuisknop:DefWindowProc- een WM_CONTEXTMENU bericht naar het menu verzendt en het ook naar het bovenliggende item verzendt. Als DefWindowProc- bovendien een WM_APPCOMMAND bericht ontvangt voor een venster op het hoogste niveau, wordt er een shellhook met code HSHELL_APPCOMMAND aanroepen.
Er is ondersteuning voor de toetsenborden met extra toetsen voor browserfuncties, mediafuncties, het starten van toepassingen en energiebeheer. Zie toetsenbordtoetsen voor bladeren en andere functiesvoor meer informatie.
Muisberichten
De muis genereert een invoerevenement wanneer de gebruiker de muis verplaatst of een muisknop drukt of loslaat. Het systeem converteert muisinvoergebeurtenissen naar berichten en plaatst deze in de berichtenwachtrij van de desbetreffende thread. Wanneer muisberichten sneller worden geplaatst dan een thread ze kan verwerken, worden alle behalve de meest recente muisberichten verwijderd.
Een venster ontvangt een muisbericht wanneer een muisgebeurtenis optreedt wanneer de cursor zich binnen de randen van het venster bevindt of wanneer het venster de muis heeft vastgelegd. Muisberichten zijn onderverdeeld in twee groepen: clientgebiedberichten en niet-clientgebiedberichten. Normaal gesproken verwerkt een toepassing berichten in het clientgebied en negeert niet-clientgebiedberichten.
In deze sectie worden de volgende onderwerpen behandeld:
Muisberichten van clientgebied
Een venster ontvangt een muisbericht van het clientgebied wanneer een muis gebeurtenis plaatsvindt in het clientgebied van het venster. Het systeem plaatst het WM_MOUSEMOVE bericht in het venster wanneer de gebruiker de cursor binnen het clientgebied verplaatst. Er wordt een van de volgende berichten geplaatst wanneer de gebruiker op een muisknop drukt of loslaat terwijl de cursor zich in het clientgebied bevindt.
Bericht | Betekenis |
---|---|
WM_LBUTTONDBLCLK | Er is op de linkermuisknop gedubbelklikt. |
WM_LBUTTONDOWN | De linkermuisknop werd ingedrukt. |
WM_LBUTTONUP | De linkermuisknop is losgelaten. |
WM_MBUTTONDBLCLK | De middelste muisknop is dubbelklikken. |
WM_MBUTTONDOWN | De middelste muisknop werd ingedrukt. |
WM_MBUTTONUP | De middelste muisknop is losgelaten. |
WM_RBUTTONDBLCLK | Er is op de rechtermuisknop gedubbelklikt. |
WM_RBUTTONDOWN | De rechtermuisknop is ingedrukt. |
WM_RBUTTONUP | De rechtermuisknop is losgelaten. |
WM_XBUTTONDBLCLK | Er is op een X-muisknop gedubbelklikt. |
WM_XBUTTONDOWN | Er is een X-muisknop ingedrukt. |
WM_XBUTTONUP | Er is een X-muisknop losgelaten. |
Bovendien kan een toepassing de TrackMouseEvent-functie aanroepen om het systeem twee andere berichten te laten verzenden. Hiermee wordt het WM_MOUSEHOVER bericht geplaatst wanneer de cursor gedurende een bepaalde periode over het clientgebied beweegt. Hiermee wordt het WM_MOUSELEAVE bericht geplaatst wanneer de cursor het clientgebied verlaat.
Berichtparameters
De parameter lParam van een muisbericht van het clientgebied geeft de positie van de cursor-hot spot aan. Het woord met lage volgorde geeft de x-coördinaat van de hot spot aan en het woord in hoge volgorde geeft de y-coördinaat aan. De coördinaten worden opgegeven in clientcoördinaten. In het clientcoördinaatsysteem worden alle punten op het scherm opgegeven ten opzichte van de coördinaten (0,0) van de linkerbovenhoek van het clientgebied.
De parameter wParam bevat vlaggen die de status van de andere muisknoppen aangeven en de Ctrl- en Shift-toetsen op het moment van de muisgebeurtenis. U kunt op deze vlaggen controleren wanneer de verwerking van muisberichten afhankelijk is van de status van een andere muisknop of van de Ctrl- of Shift-toets. De parameter wParam kan een combinatie van de volgende waarden zijn.
Waarde | Beschrijving |
---|---|
MK_CONTROL | De Ctrl-toets is niet beschikbaar. |
MK_LBUTTON | De linkermuisknop is offline. |
MK_MBUTTON | De middelste muisknop is omlaag. |
MK_RBUTTON | De rechtermuisknop is omlaag. |
MK_SHIFT | De Shift-toets is niet beschikbaar. |
MK_XBUTTON1 | De XBUTTON1 is offline. |
MK_XBUTTON2 | De XBUTTON2 is uit. |
Double-Click berichten
Het systeem genereert een dubbelklikbericht wanneer de gebruiker tweemaal achter elkaar op een muisknop klikt. Wanneer de gebruiker op een knop klikt, wordt er een rechthoek rond de cursor-hot spot geplaatst. Het markeert ook het tijdstip waarop de klik heeft plaatsgevonden. Wanneer de gebruiker een tweede keer op dezelfde knop klikt, bepaalt het systeem of de hot spot zich nog in de rechthoek bevindt en berekent de tijd die is verstreken sinds de eerste klik. Als de hot spot zich nog steeds in de rechthoek bevindt en de verstreken tijd niet groter is dan de time-outwaarde voor dubbelklikken, genereert het systeem een bericht met dubbelklikken.
Een toepassing kan time-outwaarden voor dubbelklikken ophalen en instellen met behulp van respectievelijk de functies GetDoubleClickTime en SetDoubleClickTime functies. De toepassing kan ook de time-outwaarde voor dubbelklikken instellen met behulp van de vlag SPI_SETDOUBLECLICKTIME met de functie SystemParametersInfo. Het kan ook de grootte van de rechthoek instellen die het systeem gebruikt om dubbelklikken te detecteren door de SPI_SETDOUBLECLKWIDTH en SPI_SETDOUBLECLKHEIGHT vlaggen door te geven aan SystemParametersInfo-. Houd er echter rekening mee dat het instellen van de time-outwaarde voor dubbelklikken en rechthoek van invloed is op alle toepassingen.
Een toepassingsgedefinieerd venster ontvangt standaard geen berichten met dubbelklikken. Vanwege de systeemoverhead die betrokken is bij het genereren van berichten met dubbelklikken, worden deze berichten alleen gegenereerd voor vensters die behoren tot klassen met de stijl CS_DBLCLKS klasse. Uw toepassing moet deze stijl instellen bij het registreren van de vensterklasse. Zie Vensterklassenvoor meer informatie.
Een bericht met dubbelklikken is altijd het derde bericht in een reeks met vier berichten. De eerste twee berichten zijn de knop-omlaag- en knop-upberichten die door de eerste klik worden gegenereerd. Met de tweede klik wordt het bericht met dubbelklikken gegenereerd, gevolgd door een ander knop-upbericht. Als u bijvoorbeeld dubbelklikt op de linkermuisknop, wordt de volgende berichtenreeks gegenereerd:
Omdat een venster altijd een knop-omlaagbericht ontvangt voordat een bericht met dubbelklikken wordt ontvangen, gebruikt een toepassing meestal een bericht met dubbelklikken om een taak uit te breiden die is begonnen tijdens een knop-omlaagbericht. Wanneer de gebruiker bijvoorbeeld op een kleur in het kleurenpalet van Microsoft Paint klikt, wordt de geselecteerde kleur naast het palet weergegeven. Wanneer de gebruiker dubbelklikt op een kleur, wordt de kleur weergegeven en wordt de Kleuren bewerken dialoogvenster geopend.
Niet-clientgebied muisberichten
Een venster ontvangt een bericht van een niet-clientgebiedmuis wanneer een muis gebeurtenis plaatsvindt in een deel van een venster, met uitzondering van het clientgebied. Het niet-clientgebied van een venster bestaat uit de rand, menubalk, titelbalk, schuifbalk, venstermenu, knop minimaliseren en knop maximaliseren.
Het systeem genereert niet-clientgebiedberichten voornamelijk voor eigen gebruik. Het systeem gebruikt bijvoorbeeld niet-clientgebiedberichten om de cursor te wijzigen in een pijl met twee punten wanneer de cursor-hot spot naar de rand van een venster wordt verplaatst. Een venster moet niet-clientgebied muisberichten doorgeven aan de DefWindowProc functie om te profiteren van de ingebouwde muisinterface.
Er is een corresponderend niet-clientgebied muisbericht voor elk clientgebied muisbericht. De namen van deze berichten zijn vergelijkbaar, behalve dat de benoemde constanten voor de niet-clientgebiedberichten de letters NC bevatten. Als u bijvoorbeeld de cursor in het niet-clientgebied verplaatst, wordt er een WM_NCMOUSEMOVE bericht gegenereerd en drukt u op de linkermuisknop terwijl de cursor zich in het niet-clientgebied bevindt, wordt er een WM_NCLBUTTONDOWN bericht gegenereerd.
De parameter lParam van een niet-clientgebied muisbericht is een structuur die de x- en y-coördinaten van de cursor-hot spot bevat. In tegenstelling tot coördinaten van muisberichten van clientgebied worden de coördinaten opgegeven in schermcoördinaten in plaats van clientcoördinaten. In het schermcoördinaatsysteem bevinden alle punten op het scherm zich ten opzichte van de coördinaten (0,0) van de linkerbovenhoek van het scherm.
De parameter wParam bevat een hit-testwaarde, een waarde die aangeeft waar zich in het niet-clientgebied de muisgebeurtenis heeft voorgedaan. In de volgende sectie wordt het doel van hit-testwaarden uitgelegd.
Het WM_NCHITTEST bericht
Wanneer een muisgebeurtenis optreedt, verzendt het systeem een WM_NCHITTEST bericht naar het venster met de cursor-hot spot of het venster dat de muis heeft vastgelegd. Het systeem gebruikt dit bericht om te bepalen of een clientgebied of niet-clientgebied muisbericht moet worden verzonden. Een toepassing die muisbewegingen en muisknopberichten moet ontvangen, moet het WM_NCHITTEST bericht doorgeven aan de functie DefWindowProc.
De parameter lParam van het WM_NCHITTEST bericht bevat de schermcoördinaten van de cursor-hot spot. De functie DefWindowProc onderzoekt de coördinaten en retourneert een hit-testwaarde die de locatie van de hot spot aangeeft. De hit-testwaarde kan een van de volgende waarden zijn.
Waarde | Locatie van hot spot |
---|---|
HTBORDER- | In de rand van een venster dat geen grootterand heeft. |
HTBOTTOM- | In de onder-horizontale rand van een venster. |
HTBOTTOMLEFT- | In de linkerbenedenhoek van een vensterrand. |
HTBOTTOMRIGHT- | In de rechterbenedenhoek van een vensterrand. |
HTCAPTION- | In een titelbalk. |
HTCLIENT- | In een clientgebied. |
HTCLOSE- | In een knop sluiten. |
HTERROR- | Op de achtergrond van het scherm of op een scheidingslijn tussen vensters (hetzelfde als HTNOWHERE, behalve dat de functie DefWindowProc een systeemepep produceert om een fout aan te geven). |
HTGROWBOX- | In een formaatvak (hetzelfde als HTSIZE). |
HTHELP- | In een knop Help. |
HTHSCROLL- | In een horizontale schuifbalk. |
HTLEFT- | In de linkerrand van een venster. |
HTMENU- | In een menu. |
HTMAXBUTTON- | In een knop maximaliseren. |
HTMINBUTTON- | In een knop minimaliseren. |
HTNOWHERE- | Op de achtergrond van het scherm of op een scheidingslijn tussen vensters. |
HTREDUCE- | In een knop minimaliseren. |
HTRIGHT- | In de rechterrand van een venster. |
HTSIZE- | In een formaatvak (hetzelfde als HTGROWBOX). |
HTSYSMENU- | In een menu System of in een knop sluiten in een onderliggend venster. |
HTTOP- | In de boven-horizontale rand van een venster. |
HTTOPLEFT- | In de linkerbovenhoek van een vensterrand. |
HTTOPRIGHT- | In de rechterbovenhoek van een vensterrand. |
HTTRANSPARENT- | In een venster dat momenteel wordt gedekt door een ander venster in dezelfde thread. |
HTVSCROLL- | In de verticale schuifbalk. |
HTZOOM- | In een knop maximaliseren. |
Als de cursor zich in het clientgebied van een venster bevindt, retourneert DefWindowProc- de HTCLIENT- hit-testwaarde naar de vensterprocedure. Wanneer de vensterprocedure deze code naar het systeem retourneert, converteert het systeem de schermcoördinaten van de cursor-hot spot naar clientcoördinaten en plaatst het juiste bericht van de clientgebiedmuis.
De functie DefWindowProc retourneert een van de andere hit-testwaarden wanneer de cursor-hot spot zich in het niet-clientgebied van een venster bevindt. Wanneer de vensterprocedure een van deze hit-testwaarden retourneert, plaatst het systeem een niet-clientgebied muisbericht, waarbij de waarde hit-test in de wParam parameter en de cursorcoördinaten in de parameter lParam.
Muis sonar
De toegankelijkheidsfunctie Muis sonar toont kort verschillende concentrische cirkels rond de aanwijzer wanneer de gebruiker op de Ctrl-toets drukt en loslaat. Met deze functie kan een gebruiker de muisaanwijzer vinden op een scherm dat onbelangrijke of met resolutie is ingesteld op hoog, op een monitor van slechte kwaliteit of voor gebruikers met een slecht zicht. Zie de volgende vlaggen in SystemParametersInfovoor meer informatie:
SPI_GETMOUSESONAR
SPI_SETMOUSESONAR
Muis verdwijnt
De toegankelijkheidsfunctie Mouse Vanish verbergt de aanwijzer wanneer de gebruiker typt. De muisaanwijzer wordt opnieuw weergegeven wanneer de gebruiker de muis verplaatst. Met deze functie blijft de aanwijzer verborgen dat de tekst wordt getypt, bijvoorbeeld in een e-mailbericht of een ander document. Zie de volgende vlaggen in SystemParametersInfovoor meer informatie:
SPI_GETMOUSEVANISH
SPI_SETMOUSEVANISH
Het muiswiel
Het muiswiel combineert de kenmerken van een wiel en een muisknop. Het wiel heeft discrete, gelijkmatige inkepingen. Wanneer u het wiel draait, wordt er een wielbericht naar uw toepassing verzonden terwijl elke notch wordt aangetroffen. De wielknop kan ook werken als een normale Windows-middelste (derde) knop. Als u op het muiswiel drukt en losgeeft, worden standaardberichten WM_MBUTTONUP en WM_MBUTTONDOWN verzonden. Als u dubbelklikt op de derde knop, wordt het standaardbericht WM_MBUTTONDBLCLK verzonden.
Het muiswiel wordt ondersteund via het WM_MOUSEWHEEL bericht.
Als u de muis draait, wordt het WM_MOUSEWHEEL bericht naar het focusvenster verzonden. De functie DefWindowProc het bericht doorgegeven aan het bovenliggende venster. Er mag geen intern doorsturen van het bericht zijn, omdat DefWindowProc het doorgeeft aan de bovenliggende keten totdat een venster wordt gevonden dat het bericht verwerkt.
Het aantal schuiflijnen bepalen
Toepassingen moeten de functie SystemParametersInfo gebruiken om het aantal regels op te halen dat een document schuift voor elke schuifbewerking (wielnotch). Als u het aantal regels wilt ophalen, roept een toepassing de volgende aanroep uit:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
De variabele 'pulScrollLines' verwijst naar een niet-ondertekende integerwaarde die het voorgestelde aantal regels ontvangt dat moet worden gerold wanneer het muiswiel zonder wijzigingstoetsen wordt gedraaid:
- Als dit getal 0 is, hoeft u niet te schuiven.
- Als dit getal WHEEL_PAGESCROLLis, moet een wielroller worden geïnterpreteerd als eenmaal klikken in de regio's omlaag of pagina-omhoog van de schuifbalk.
- Als het aantal regels dat u wilt schuiven groter is dan het aantal lijnen dat kan worden weergegeven, moet de schuifbewerking ook worden geïnterpreteerd als een pagina omlaag- of pagina-omhoogbewerking.
De standaardwaarde voor het aantal schuiflijnen is 3. Als een gebruiker het aantal schuiflijnen wijzigt met behulp van het blad Eigenschappen van de muis in het Configuratiescherm, verzendt het besturingssysteem een WM_SETTINGCHANGE bericht naar alle vensters op het hoogste niveau met SPI_SETWHEELSCROLLLINES opgegeven. Wanneer een toepassing het WM_SETTINGCHANGE bericht ontvangt, kan het nieuwe aantal schuiflijnen worden weergegeven door het volgende aan te roepen:
SystemParametersInfo(SPI_GETWHEELSCROLLLINES, 0, pulScrollLines, 0)
Besturingselementen die schuiven
De onderstaande tabel bevat de besturingselementen met scrollfunctionaliteit (inclusief schuiflijnen die door de gebruiker zijn ingesteld).
Beheersen | Scrollen |
---|---|
Besturingselement bewerken | Verticaal en horizontaal. |
Keuzelijst besturingselement | Verticaal en horizontaal. |
Keuzelijst met invoervak | Wanneer deze niet wordt neergezet, haalt elke schuif het volgende of vorige item op. Wanneer u omlaag schuift, schuift elke schuif het bericht door naar de keuzelijst, die dienovereenkomstig schuift. |
CMD (opdrachtregel) | Verticaal. |
Structuurweergave | Verticaal en horizontaal. |
Lijstweergave | Verticaal en horizontaal. |
Omhoog/omlaag Scrolls | Eén item tegelijk. |
Trackbar Scrolls | Eén item tegelijk. |
Microsoft Rich Edit 1.0 | Verticaal. Opmerking: de Exchange-client heeft zijn eigen versies van de besturingselementen voor de lijstweergave en structuurweergave die geen wielondersteuning hebben. |
Microsoft Rich Edit 2.0 | Verticaal. |
Een muis detecteren met een wiel
Als u wilt bepalen of een muis met een wiel is verbonden, roept u GetSystemMetrics- aan met SM_MOUSEWHEELPRESENT. Een retourwaarde van TRUE geeft aan dat de muis is verbonden.
Het volgende voorbeeld is afkomstig uit de vensterprocedure voor een besturingselement voor bewerken met meerdere regels:
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;
Vensteractivering
Wanneer de gebruiker op een inactief venster op het hoogste niveau of het onderliggende venster van een inactief venster op het hoogste niveau klikt, verzendt het systeem het WM_MOUSEACTIVATE bericht (onder andere) naar het bovenste of onderliggende venster. Het systeem verzendt dit bericht na het plaatsen van het WM_NCHITTEST bericht naar het venster, maar voordat het knop-omlaagbericht wordt geplaatst. Wanneer WM_MOUSEACTIVATE wordt doorgegeven aan de functie DefWindowProc, activeert het systeem het venster op het hoogste niveau en plaatst het knop-omlaagbericht vervolgens in het bovenste of onderliggende venster.
Door WM_MOUSEACTIVATEte verwerken, kan een venster bepalen of het venster op het hoogste niveau het actieve venster wordt als gevolg van een muisklik en of het venster waarop is geklikt, het volgende knop-omlaag bericht ontvangt. Dit doet u door een van de volgende waarden te retourneren nadat WM_MOUSEACTIVATEis verwerkt.
Waarde | Betekenis |
---|---|
MA_ACTIVATE | Hiermee wordt het venster geactiveerd en wordt het muisbericht niet verwijderd. |
MA_NOACTIVATE | Activeert het venster niet en negeert het muisbericht niet. |
MA_ACTIVATEANDEAT | Hiermee wordt het venster geactiveerd en wordt het muisbericht verwijderd. |
MA_NOACTIVATEANDEAT | Het venster wordt niet geactiveerd, maar het muisbericht wordt genegeerd. |