Over schuifbalken
Een venster kan een gegevensobject, zoals een document of bitmap, weergeven dat groter is dan het clientgebied van het venster. Wanneer deze is voorzien van een schuifbalk, kan de gebruiker door een gegevensobject in het clientgebied schuiven om de gedeelten van het object weer te geven die buiten de randen van het venster vallen.
Schuifbalken moeten worden opgenomen in elk venster waarvoor de inhoud van het clientgebied zich buiten de randen van het venster bevindt. De stand van een schuifbalk bepaalt de richting waarin schuiven plaatsvindt wanneer de gebruiker de schuifbalk gebruikt. Met een horizontale schuifbalk kan de gebruiker de inhoud van een venster naar links of rechts schuiven. Met een verticale schuifbalk kan de gebruiker de inhoud omhoog of omlaag schuiven.
De volgende onderwerpen worden in deze sectie besproken.
- delen van een schuifbalk
- standaard schuifbalken en schuifbalkbesturingselementen
- schuifvakpositie en schuifbereik
- zichtbaarheid van schuifbalk
- Schuifbalkaanvragen
- toetsenbordinterface voor een schuifbalk
- Scrollen van de Clientruimte
- schuifbalkkleuren en metrische gegevens
Delen van een schuifbalk
Een schuifbalk bestaat uit een gearceerde as met een pijlknop aan elk uiteinde en een schuifvak (ook wel een duim genoemd) tussen de pijlknoppen. Een schuifbalk vertegenwoordigt de totale lengte of breedte van een gegevensobject in het clientgebied van een venster; het schuifvak vertegenwoordigt het gedeelte van het object dat zichtbaar is in het clientgebied. De positie van het schuifvak verandert wanneer de gebruiker door een gegevensobject schuift om een ander gedeelte ervan weer te geven. Het systeem past ook de grootte van het schuifvak van een schuifbalk aan, zodat wordt aangegeven welk gedeelte van het hele gegevensobject momenteel zichtbaar is in het venster. Als het grootste deel van het object zichtbaar is, neemt het schuifvak het grootste deel van de schuivenbalkas in beslag. Als slechts een klein deel van het object zichtbaar is, beslaat het schuifvak ook een klein deel van de schuifbalk.
De gebruiker schuift door de inhoud van een venster door op een van de pijlknoppen te klikken, door op het gebied in de gearceerde scrollbalk te klikken, of door het scrollblok te slepen. Wanneer de gebruiker op een pijlknop klikt, schuift de toepassing de inhoud met één eenheid (meestal één regel of kolom). Wanneer de gebruiker op de gearceerde gebieden klikt, schuift de toepassing met één venster door de inhoud. De hoeveelheid scrollen die optreedt wanneer de gebruiker het schuifvak sleept, is afhankelijk van de afstand die de gebruiker het schuifvak sleept en van het schuifbereik van de schuifbalk. Zie Scroll Box Position and Scrolling Rangevoor meer informatie over het schuifbereik.
In de volgende schermafbeelding ziet u een geavanceerd bewerkingselement met verticale en horizontale schuifbalken, zoals die verschijnen in Windows Vista. De verticale schuifbalk is momenteel "actief" omdat de muisaanwijzer eroverheen zweefde toen de schermafbeelding werd gemaakt.
Standaard schuifbalken en scrollbalkbedieningselementen
Een schuifbalk is opgenomen in een venster als een standaardschuifbalk of als schuifbalkbesturing. Een standaard schuifbalk bevindt zich in het niet-clientgebied van een venster. Het wordt samen met het venster gemaakt en zichtbaar gemaakt wanneer het venster zichtbaar wordt. Het enige doel van een standaard schuifbalk is om de gebruiker in staat te stellen scrollverzoeken te genereren voor het weergeven van de volledige inhoud van het clientgebied. U kunt een standaard schuifbalk in een venster opnemen door WS_HSCROLL, WS_VSCROLLof beide stijlen op te geven wanneer u het venster maakt. Met de stijl WS_HSCROLL wordt een horizontale schuifbalk gemaakt die onder aan het clientgebied wordt geplaatst. De stijl WS_VSCROLL maakt een verticale schuifbalk rechts van het clientgebied. De metrische waarden voor het SM_CXHSCROLL en SM_CYHSCROLL systeem definiëren de breedte en hoogte van een standaard horizontale schuifbalk. De waarden voor SM_CXVSCROLL en SM_CYVSCROLL definiëren de breedte en hoogte van een standaard verticale schuifbalk. Een standaard schuifbalk maakt deel uit van het bijbehorende venster en heeft daarom geen eigen venstergreep.
Een schuifbalkbesturingselement is een besturingselementvenster dat deel uitmaakt van de vensterklasse SCROLLBAR. Er wordt een besturingselement voor een schuifbalk weergegeven en het functioneert zoals een standaardschuifbalk, maar het is een afzonderlijk venster. Als afzonderlijk venster heeft een besturingselement voor de schuifbalk directe invoerfocus. In tegenstelling tot een standaard schuifbalk heeft een schuifbalkbesturingselement ook een ingebouwde toetsenbordinterface.
U kunt zoveel besturingselementen voor schuifbalken gebruiken als nodig is in één venster. Wanneer u een besturingselement voor een schuifbalk maakt, moet u de grootte en positie van de schuifbalk opgeven. Als het venster van een schuifbalk kan worden gewijzigd, moeten de afmetingen van de schuifbalk worden aangepast wanneer de grootte van het venster verandert.
Het voordeel van het gebruik van een standaard schuifbalk is dat het systeem de schuifbalk maakt en automatisch de grootte en positie ervan instelt. Standaard schuifbalken zijn echter soms te beperkend. Stel dat u een clientgebied wilt verdelen in kwadranten en een afzonderlijke set schuifbalken wilt gebruiken om de inhoud van elk kwadrant te bepalen. U kunt geen standaard schuifbalken gebruiken omdat u slechts één set schuifbalken voor een bepaald venster kunt maken. Gebruik in plaats daarvan schuifbalkbesturingselementen, omdat u er zoveel aan een venster kunt toevoegen als u wilt.
Toepassingen kunnen besturingselementen voor schuifbalken bieden voor andere doeleinden dan het schuiven van de inhoud van een venster. Een toepassing voor schermbeveiliging kan bijvoorbeeld een schuifbalk bieden voor het instellen van de snelheid waarmee afbeeldingen op het scherm worden verplaatst.
Een schuifbalk besturingselement kan een aantal stijlen hebben die dienen om de stand en positie van de schuifbalk te bepalen. U geeft de gewenste stijlen op wanneer u de functie CreateWindowEx aanroept om een besturingselement voor de schuifbalk te maken. Sommige stijlen maken een scrollbalkbesturingselement dat met een standaardbreedte of -hoogte gebruikmaakt. U moet echter altijd de x- en y-coördinaten en de andere dimensies van de schuifbalk opgeven.
Zie Schuifbalkbesturingsstijlenvoor een tabel van schuifbalkbesturingsstijlen.
Notitie
Als u visuele stijlen met schuifbalken wilt gebruiken, moet een toepassing een manifest bevatten en moet deze InitCommonControls aanroepen aan het begin van het programma. Zie Visuele stijlenvoor meer informatie over visuele stijlen. Zie Visuele stijlen inschakelenvoor meer informatie over manifesten.
Positie van schuifvak en schuifbereik
De positie van het schuifvak wordt weergegeven als een geheel getal; deze is relatief ten opzichte van de linker- of bovenzijde van de schuifbalk, afhankelijk van of de schuifbalk horizontaal of verticaal is. De positie moet binnen de minimum- en maximumwaarden van het schuifbereik vallen. In een schuifbalk met een bereik van 0 tot en met 100 bevindt positie 50 zich bijvoorbeeld in het midden, waarbij de resterende posities gelijkmatig langs de schuifbalk worden verdeeld. Het eerste bereik is afhankelijk van de schuifbalk. Standaard schuifbalken hebben een eerste bereik van 0 tot en met 100; Besturingselementen voor schuifbalken hebben een leeg bereik (zowel minimum- als maximumwaarden zijn nul), tenzij u een expliciet bereik opgeeft wanneer het besturingselement wordt gemaakt. U kunt het bereik op elk gewenst moment wijzigen. U kunt de functie SetScrollInfo gebruiken om de bereikwaarden in te stellen en de functie GetScrollInfo om de huidige bereikwaarden op te halen.
Een toepassing past het schuifbereik doorgaans aan op handige gehele getallen, waardoor de positie van het schuifvak eenvoudig kan worden omgezet in een waarde die overeenkomt met het gegevensobject dat moet worden gescrold. Als een toepassing bijvoorbeeld 260 regels van een tekstbestand moet weergeven in een venster dat slechts 16 regels tegelijk kan weergeven, kan het verticale schuifbalkbereik worden ingesteld op 1 tot en met 244. Als het schuifvak op positie 1 staat, bevindt de eerste regel zich boven aan het venster. Als het schuifvak zich op positie 244 bevindt, bevindt de laatste regel (regel 260) zich onder aan het venster. Als een toepassing probeert een positiewaarde op te geven die kleiner is dan het minimum of meer dan het maximum, wordt in plaats daarvan de minimum- of maximumwaarde voor het schuifbereik gebruikt.
U kunt een paginaformaat instellen voor een schuifbalk. Het paginaformaat vertegenwoordigt het aantal gegevenseenheden dat in het clientgebied van het eigenaarsvenster past op basis van de huidige grootte. Als het clientgebied bijvoorbeeld 16 regels tekst kan bevatten, stelt een toepassing het paginaformaat in op 16. Het systeem gebruikt het paginaformaat, samen met het schuifbereik en de lengte van de schuivenbalkas, om de grootte van het schuifvak in te stellen. Wanneer het formaat van een venster met een schuifbalk wordt gewijzigd, moet een toepassing de SetScrollInfo functie aanroepen om het paginaformaat in te stellen. Een toepassing kan het huidige paginaformaat ophalen door de functie GetScrollInfo aan te roepen.
Als u een nuttige relatie tot stand wilt brengen tussen het bereik van de schuifbalk en het gegevensobject, moet een toepassing het bereik aanpassen wanneer de grootte van het gegevensobject wordt gewijzigd.
Wanneer de gebruiker het schuifvak in een schuifbalk verplaatst, wordt de positie van het schuifvak door de schuifbalk als een geheel getal in het schuifbereik gerapporteerd. Als de positie de minimumwaarde is, bevindt het schuifvak zich boven aan een verticale schuifbalk of aan de linkerkant van een horizontale schuifbalk. Als de positie de maximumwaarde is, bevindt het schuifvak zich onder aan een verticale schuifbalk of aan de rechterkant van een horizontale schuifbalk.
De maximale waarde die een schuifbalk kan rapporteren (dat wil gezegd de maximale schuifpositie) is afhankelijk van het paginaformaat. Als de schuifbalk een paginaformaat groter dan één heeft, is de maximale schuifpositie kleiner dan de maximale bereikwaarde. U kunt de volgende formule gebruiken om de maximale schuifpositie te berekenen:
MaxScrollPos = MaxRangeValue - (PageSize - 1)
Een toepassing moet het schuifvak in een schuifbalk verplaatsen. Hoewel de gebruiker een verzoek indient om te schuiven in een schuifbalk, wordt de positie van het schuifvak niet automatisch bijgewerkt door de schuifbalk. In plaats daarvan wordt het verzoek doorgegeven aan het bovenliggende venster, dat de gegevens moet scrollen en de positie van de scrollbalk moet bijwerken. Een toepassing maakt gebruik van de functie SetScrollInfo om de positie van het schuifvak bij te werken; anders wordt de functie SetScrollPos gebruikt. Omdat het de verplaatsing van het schuifvak bepaalt, kan de toepassing het schuifvak verplaatsen in stappen die het beste werken voor de gegevens die worden gescrold.
Zichtbaarheid van schuifbalk
Het systeem verbergt en schakelt een standaard schuifbalk uit wanneer er gelijke minimum- en maximumwaarden zijn opgegeven. Het systeem verbergt en schakelt ook een standaard schuifbalk uit als u een paginaformaat opgeeft dat het hele schuifbereik van de schuifbalk bevat. Dit is de manier om tijdelijk een schuifbalk te verbergen wanneer deze niet nodig is voor de inhoud van het clientgebied. Het is niet nodig om door de schuifbalk te schuiven wanneer deze verborgen is. Het systeem schakelt de schuifbalk in en toont het opnieuw wanneer u de minimum- en maximumwaarden instelt op ongelijke waarden en wanneer het paginaformaat niet het hele schuifbereik bevat. De functie ShowScrollBar kan ook worden gebruikt om een schuifbalk te verbergen of weer te geven. Dit heeft geen invloed op het bereik, het paginaformaat of de positie van het schuifvak van de schuifbalk.
De functie EnableScrollBar kan worden gebruikt om een of beide pijlen van een schuifbalk uit te schakelen. Een toepassing geeft uitgeschakelde pijlen grijs weer en reageert niet op gebruikersinvoer.
Aanvragen voor scrollbalken
De gebruiker doet scrollverzoeken door op verschillende delen van een schuifbalk te klikken. Het systeem verzendt de aanvraag naar het opgegeven venster in de vorm van een WM_HSCROLL of WM_VSCROLL bericht. Een horizontale schuifbalk verzendt het WM_HSCROLL bericht; een verticale schuifbalk verzendt het WM_VSCROLL bericht. Elk bericht bevat een aanvraagcode die overeenkomt met de actie van de gebruiker, de bediening van de schuifbalk (alleen voor schuifbalkbedieningen) en, in sommige gevallen, de positie van het scrollvak.
In het volgende diagram ziet u de aanvraagcode die de gebruiker genereert bij het klikken op verschillende delen van een schuifbalk.
De SB_ waarden geven de actie op die de gebruiker uitvoert. Een toepassing onderzoekt de codes die bij de WM_HSCROLL en WM_VSCROLL berichten horen en voert vervolgens de juiste schuifbewerking uit. In de volgende tabel wordt de actie van de gebruiker opgegeven voor elke waarde, gevolgd door het antwoord van de toepassing. In elk geval wordt een eenheid gedefinieerd door de toepassing, indien van toepassing voor de gegevens. De typische eenheid voor het verticaal schuiven van tekst is bijvoorbeeld een tekstregel.
Verzoek | Actie | Antwoord |
---|---|---|
SB_LINEUP | De gebruiker klikt op de bovenste schuifpijl. | Verlaag de positie van het schuifvak; schuif met één eenheid naar boven in de gegevens. |
SB_LINEDOWN | De gebruiker klikt op de onderste schuifpijl. | Hiermee wordt de positie van het schuifvak verhoogd; schuift met één eenheid naar de onderkant van de gegevens. |
SB_LINELEFT | De gebruiker klikt op de linker-scrollpijl. | De positie van het schuifvak verminderen; schuift met één eenheid naar het linkeruiteinde van de gegevens. |
SB_LINERIGHT | De gebruiker klikt op de rechterscrollpijl. | Hiermee wordt de positie van het schuifvak verhoogd; schuift met één eenheid naar het rechtereinde van de gegevens. |
SB_PAGEUP | De gebruiker klikt op de schuivenbalkas boven het schuifvak. | Hiermee wordt de positie van het schuifvak verminderd met het aantal gegevenseenheden in het venster; schuift naar de bovenkant van de gegevens met hetzelfde aantal eenheden. |
SB_PAGEDOWN | De gebruiker klikt op de schuifbalkas onder het schuifvak. | Hiermee verhoogt u de positie van het schuifvak met het aantal gegevenseenheden in het venster; schuift naar de onderkant van de data met hetzelfde aantal eenheden. |
SB_PAGELEFT | De gebruiker klikt op de schuivenbalkas links van het schuifvak. | Hiermee wordt de positie van het schuifvak verminderd met het aantal gegevenseenheden in het venster; schuift naar het linkereinde van de gegevens met hetzelfde aantal eenheden. |
SB_PAGERIGHT | De gebruiker klikt op de schuivenbalkas rechts van het schuifvak. | Hiermee wordt de positie van het schuifvak verhoogd met het aantal gegevenseenheden in het venster; schuift naar het rechtereinde van de gegevens met hetzelfde aantal eenheden. |
SB_THUMBPOSITION | De gebruiker gaf het schuifvak vrij nadat hij het had gesleept. | Hiermee stelt u de schuifbalk in op de positie die in het bericht is opgegeven; de gegevens worden met hetzelfde aantal eenheden verschoven als waarmee de schuifbalk is bewogen. |
SB_THUMBTRACK | De gebruiker sleept het schuifvak. | Met deze functie stelt u het schuifvak in op de in het bericht opgegeven positie en schuift u de gegevens met evenveel eenheden mee als het schuifvak is verschoven, voor toepassingen die gegevens snel weergeven. Toepassingen die niet snel gegevens kunnen renderen, moeten wachten op de SB_THUMBPOSITION-aanvraagcode voordat zij het schuifvak verplaatsen en de gegevens scrollen. |
SB_ENDSCROLL | De gebruiker laat de muis los nadat deze op een pijl of in de schuivenbalkas is vastgehouden. | Er is geen antwoord nodig. |
Een schuifbalk genereert SB_THUMBPOSITION en SB_THUMBTRACK aanvraagcode wanneer de gebruiker klikt en het schuifvak sleept. Een toepassing moet worden geprogrammeerd om de SB_THUMBTRACK of SB_THUMBPOSITION aanvraagcode te verwerken.
De SB_THUMBPOSITION verzoekcode treedt op wanneer de gebruiker de muisknop loslaat nadat hij op het schuifvak heeft geklikt. Een toepassing die dit bericht verwerkt, voert de schuifbewerking uit nadat de gebruiker het schuifvak naar de gewenste positie heeft gesleept en de muisknop heeft losgelaten.
De SB_THUMBTRACK verzoekcode treedt op wanneer de gebruiker het schuifvak sleept. Als een toepassing SB_THUMBTRACK aanvraagcodes verwerkt, kan deze de inhoud van een venster schuiven terwijl de gebruiker het schuifvak sleept. Een schuifbalk kan echter veel SB_THUMBTRACK aanvraagcode in een korte periode genereren, dus een toepassing moet deze aanvraagcodes alleen verwerken als deze de inhoud van het venster snel opnieuw kan weergeven.
Toetsenbordinterface voor een schuifbalk
Een schuifbalkbesturingselement biedt een ingebouwde toetsenbordinterface waarmee de gebruiker scrollverzoeken kan uitgeven met behulp van het toetsenbord; een standaard schuifbalk niet. Wanneer een schuifbalkcontrole de toetsenbordfocus heeft, worden WM_HSCROLL en WM_VSCROLL berichten naar het oudervenster verzonden wanneer de gebruiker op de pijltoetsen drukt. De aanvraagcode wordt verzonden met elk bericht dat overeenkomt met de pijltoets waarop de gebruiker heeft gedrukt. Hieronder ziet u de pijltoetsen en de bijbehorende aanvraagcodes.
Pijltoets | Code aanvragen |
---|---|
DONS | SB_LINEDOWN of SB_LINERIGHT |
EINDE | SB_BOTTOM |
HOME | SB_TOP |
LINKS | SB_LINEUP of SB_LINELEFT |
PGDN | SB_PAGEDOWN of SB_PAGERIGHT |
PGUP | SB_PAGEUP of SB_PAGELEFT |
RECHTS | SB_LINEDOWN of SB_LINERIGHT |
OMHOOG | SB_LINEUP of SB_LINELEFT |
Notitie
De toetsenbordinterface van een schuifbalkbesturing verzendt de SB_TOP en SB_BOTTOM aanvraagcodes. De SB_TOP aanvraagcode geeft aan dat de gebruiker de hoogste waarde van het schuifbereik heeft bereikt. Een toepassing schuift de inhoud van het venster omlaag, zodat de bovenkant van het gegevensobject zichtbaar is. De SB_BOTTOM aanvraagcode geeft aan dat de gebruiker de laagste waarde van het schuifbereik heeft bereikt. Als een toepassing de SB_BOTTOM aanvraagcode verwerkt, schuift deze de inhoud van het venster omhoog zodat de onderkant van het gegevensobject zichtbaar is.
Als u een toetsenbordinterface voor een standaard schuifbalk wilt, kunt u er zelf een maken door het WM_KEYDOWN bericht in uw vensterprocedure te verwerken en vervolgens de juiste schuifactie uit te voeren op basis van de code van de virtuele sleutel die het bericht begeleidt. Zie Een toetsenbordinterface maken voor een standaard scrollbalkvoor meer informatie over het maken van een toetsenbordinterface voor een schuifbalk.
Door het clientgebied schuiven
De eenvoudigste manier om door de inhoud van een clientgebied te schuiven, is door deze te wissen en vervolgens opnieuw te tekenen. Dit is de methode die een toepassing waarschijnlijk gebruikt met SB_PAGEUP, SB_PAGEDOWN en SB_TOP aanvraagcodes, die doorgaans volledig nieuwe inhoud vereisen.
Voor sommige aanvraagcodes, zoals SB_LINEUP en SB_LINEDOWN, hoeft niet alle inhoud te worden gewist, omdat sommige zichtbaar blijven na het schuiven. De functie ScrollWindowEx behoudt een gedeelte van de inhoud van het clientgebied, verplaatst het bewaarde gedeelte een opgegeven hoeveelheid en bereidt vervolgens de rest van het clientgebied voor op het schilderen van nieuwe informatie. ScrollWindowEx gebruikt de functie BitBlt- om een specifiek deel van het gegevensobject te verplaatsen naar een nieuwe locatie binnen het clientgebied. Een onbedekt deel van het clientgebied (alles wat niet bewaard is gebleven) is ongeldig, gewist en getekend wanneer het volgende WM_PAINT bericht optreedt.
De functie ScrollWindowEx kan worden gebruikt om een deel van het clientgebied uit te sluiten van de schuifbewerking. Hierdoor blijven items met vaste posities, zoals onderliggende vensters, binnen het clientgebied verplaatst. Het gedeelte van het clientgebied dat de nieuwe informatie ontvangt, wordt automatisch ongeldig gemaakt, zodat de toepassing geen eigen knipregio's hoeft te berekenen. Zie voor meer informatie over het knippen.
Gewoonlijk laat een toepassing de inhoud van een venster scrollen in de tegenovergestelde richting van die welke door de schuifbalk wordt aangegeven. Wanneer de gebruiker bijvoorbeeld op de schacht van de schuifbalk klikt in het gebied onder het schuifvak, schuift een toepassing naar boven het object in het venster om een deel van het object weer te geven dat zich onder het zichtbare gedeelte bevindt.
U kunt ook door een rechthoekig gebied schuiven met behulp van de functie ScrollDC.
Kleuren en metrische gegevens van schuifbalk
De door het systeem gedefinieerde kleurwaarde, COLOR_SCROLLBAR, bepaalt de kleur binnen een schuivenbalkas. Gebruik de functie GetSysColor om de kleur van de schuivenbalkas en de SetSysColors-functie in te stellen om de kleur van de schuivenbalkas in te stellen. Houd er echter rekening mee dat deze wijziging van kleur van invloed is op alle schuifbalken in het systeem.
U kunt de afmetingen ophalen van de bitmaps die het systeem gebruikt in standaard schuifbalken door de functie GetSystemMetrics aan te roepen. Hier volgen de metrische systeemwaarden die zijn gekoppeld aan schuifbalken.
Systeemmetriek | Beschrijving |
---|---|
SM_CXHSCROLL | Breedte van de bitmap van de pijl op de horizontale schuifbalk |
SM_CXHTHUMB | De breedte van het schuifvak op de horizontale schuifbalk. Met deze waarde wordt de breedte opgehaald van een schuifbalk met een paginaformaat van nul. |
SM_CXVSCROLL | Breedte van bitmappijl op verticale scrollbalk |
SM_CYHSCROLL | Hoogte van pijl bitmap op horizontale schuifbalk |
SM_CYVSCROLL | Hoogte van pijl bitmap op verticale schuifbalk |
SM_CYVTHUMB | Hoogte van schuifvak op verticale schuifbalk. Met deze waarde wordt de hoogte opgehaald van een schuifbalk met een paginaformaat van nul. |