Delen via


Besturingselementtekstbewerkingen bewerken

Het systeem verwerkt automatisch alle door de gebruiker geïnitieerde tekstbewerkingen en meldt de toepassing wanneer de bewerkingen zijn voltooid.

In de volgende onderwerpen worden door de gebruiker geïnitieerde tekstbewerkingen en het antwoord van de toepassing besproken:

Een besturingselement bewerken selecteren

De gebruiker kan een besturingselement bewerken selecteren door erop te klikken met de muis of door op de Tab-toets te drukken om naar het besturingselement te gaan. De tabbing-methode maakt deel uit van een vooraf gedefinieerde toetsenbordinterface die het systeem biedt. Zie dialoogvenstersvoor een volledige beschrijving van deze interface. Wanneer de gebruiker een besturingselement voor bewerken selecteert, krijgt het systeem het toetsenbord de focus (zie Toetsenbordfocus en activering in Over toetsenbordinvoer) en markeert het de tekst met behulp van omgekeerde video.

Tekst instellen en ophalen

Een toepassing kan de tekst van een besturingselement bewerken instellen met behulp van de functie SetWindowText, de functie SetDlgItemText of door het besturingselement een WM_SETTEXT bericht te verzenden.

Als u alle tekst wilt ophalen uit een besturingselement voor bewerken, gebruikt u eerst de functie GetWindowTextLength of het WM_GETTEXTLENGTH bericht om de grootte van de buffer te bepalen die nodig is om de tekst te bevatten. Haal vervolgens de tekst op met behulp van de functie GetWindowText, de functie GetDlgItemText of het WM_GETTEXT bericht.

Tekst selecteren

Nadat een besturingselement voor bewerken is geselecteerd, kan de gebruiker tekst in het besturingselement selecteren met behulp van de muis of het toetsenbord. Een toepassing kan de begin- en eindtekenposities van de huidige selectie in een besturingselement bewerken ophalen door het besturingselement een EM_GETSEL bericht te verzenden. De retourwaarde voor de eindpositie is één groter dan het laatste teken in de selectie (de positie van het eerste teken na het laatst geselecteerde teken).

Een toepassing kan ook tekst in een besturingselement bewerken selecteren door het besturingselement een EM_SETSEL bericht te verzenden met de indexen voor het begin- en eindteken voor de selectie. De toepassing kan bijvoorbeeld EM_SETSEL gebruiken met EM_REPLACESEL om tekst te verwijderen uit een besturingselement voor bewerken.

Deze drie berichten zijn van toepassing op besturingselementen voor bewerkingen met één regel en meerdere regels.

Tekst vervangen

Een toepassing kan geselecteerde tekst in een besturingselement vervangen door het besturingselement een EM_REPLACESEL bericht te verzenden met een aanwijzer naar de vervangende tekst. Als er geen huidige selectie is, EM_REPLACESEL de vervangende tekst op de invoegpositie invoegt. De toepassing kan een EN_ERRSPACE meldingscode ontvangen als de vervangende tekst het beschikbare geheugen overschrijdt. Dit bericht is van toepassing op besturingselementen voor bewerkingen met één regel en meerdere regels.

Een toepassing kan EM_REPLACESEL gebruiken om een deel van de tekst van een besturingselement of de functie SetDlgItemText te vervangen om deze allemaal te vervangen.

Het lettertype wijzigen dat wordt gebruikt door een besturingselement bewerken

Een toepassing kan het lettertype wijzigen dat een besturingselement voor bewerken gebruikt door het WM_SETFONT bericht te verzenden. De meeste toepassingen doen dit tijdens het verwerken van het WM_INITDIALOG bericht. Als u het lettertype wijzigt, wordt de grootte van het besturingselement voor bewerken niet gewijzigd; toepassingen die het WM_SETFONT bericht verzenden, moeten mogelijk de metrische lettertypegegevens voor de tekst ophalen en de grootte van het besturingselement bewerken opnieuw berekenen. Zie Lettertypen en tekstvoor meer informatie over metrische lettertypen en lettertypen.

Kopiëren plakken en bewerkingen wissen

Er zijn vier berichten voor het verplaatsen van tekst tussen een besturingselement voor bewerken en het klembord. Het WM_COPY bericht kopieert de huidige selectie (indien van toepassing) van een besturingselement bewerken naar het klembord zonder deze te verwijderen uit het besturingselement bewerken. Het WM_CUT bericht verwijdert de huidige selectie (indien aanwezig) in het besturingselement bewerken en kopieert de verwijderde tekst naar het klembord. Het WM_CLEAR bericht verwijdert de huidige selectie (indien aanwezig) uit een besturingselement voor bewerken, maar kopieert het niet naar het klembord (tenzij de gebruiker op de Shift-toets heeft gedrukt). Het WM_PASTE bericht kopieert tekst van het klembord naar een besturingselement bewerken op de invoegpositie. Deze vier berichten zijn van toepassing op besturingselementen voor bewerkingen met één regel en meerdere regels.

Microsoft Windows NT 4.0 en hoger: een besturingselement voor bewerken bevat een ingebouwd contextmenu waarmee de gebruiker eenvoudig tekst kan verplaatsen tussen het besturingselement bewerken en het klembord. Het contextmenu wordt weergegeven wanneer de gebruiker met de rechtermuisknop op het besturingselement klikt. De opdrachten in het snelmenu bevatten Ongedaan maken, Knippen, Kopiëren, plakken, Verwijderenen Alleselecteren.

Tekst wijzigen

De gebruiker kan tekst selecteren, verwijderen of verplaatsen in een besturingselement voor bewerken. Het systeem onderhoudt een interne vlag voor elk bewerkingsbesturingselement dat aangeeft of de inhoud van het besturingselement is gewijzigd. Het systeem wist deze vlag wanneer het besturingselement wordt gemaakt en stelt de vlag in wanneer de tekst in het besturingselement wordt gewijzigd. Een toepassing kan de wijzigingsvlag ophalen door het besturingselement een EM_GETMODIFY bericht te verzenden. De toepassing kan vervolgens de wijzigingsvlag instellen of wissen door het besturingselement een EM_SETMODIFY bericht te verzenden. Deze berichten zijn van toepassing op besturingselementen voor bewerken met één regel en meerdere regels.

Door de gebruiker ingevoerde tekst beperken

De standaardlimiet voor de hoeveelheid tekst die een gebruiker kan invoeren in een besturingselement bewerken is 32 kB. Een toepassing kan de standaardlimiet wijzigen door het besturingselement een EM_SETLIMITTEXT bericht te verzenden. Met dit bericht wordt een vaste limiet ingesteld voor het aantal bytes dat de gebruiker kan invoeren in een besturingselement voor bewerken, maar is van invloed op geen van beide tekst die al in het besturingselement staat wanneer het bericht is verzonden, noch tekst die naar het besturingselement is gekopieerd door de functie SetDlgItemText of het WM_SETTEXT bericht. Stel dat de toepassing gebruikmaakt van de functie SetDlgItemText om 500 bytes in een bewerkingsbesturingselement te plaatsen en dat de gebruiker ook 500 bytes (totaal van 1000 bytes) invoert. Als de toepassing vervolgens een EM_SETLIMITTEXT bericht verzendt dat door de gebruiker ingevoerde tekst beperkt tot 300 bytes, blijven de 1000 bytes die al in het besturingselement bewerken staan, en kan de gebruiker geen tekst meer toevoegen. Als de toepassing daarentegen een EM_SETLIMITTEXT bericht verzendt dat door de gebruiker ingevoerde tekst beperkt tot 1300 bytes, blijven de 1000 bytes behouden, maar de gebruiker kan 300 meer bytes toevoegen.

Wanneer de gebruiker de tekenlimiet van een besturingselement voor bewerken bereikt, verzendt het systeem de toepassing een WM_COMMAND bericht met een EN_MAXTEXT meldingscode. Deze meldingscode betekent niet dat het geheugen is uitgeput, maar dat de limiet voor door de gebruiker ingevoerde tekst is bereikt; de gebruiker kan geen tekst meer invoeren. Als u deze limiet wilt wijzigen, moet een toepassing het besturingselement een nieuw EM_SETLIMITTEXT bericht met een hogere limiet verzenden.

Als voorbeeld van het gebruik van EM_SETLIMITTEXT en EN_MAXTEXT, stel dat de toepassing de gebruiker moet beperken tot maximaal vier tekens in een besturingselement voor bewerken. De toepassing gebruikt EM_SETLIMITTEXT om een limiet van vier tekens op te geven. Als de gebruiker een vijfde teken probeerde in te voeren, stuurt het systeem een EN_MAXTEXT meldingscode naar de toepassing.

Teken- en regelbewerkingen

Er zijn verschillende berichten die informatie retourneren over de tekens en regels in een besturingselement voor bewerken. De meeste berichten retourneren een index, meestal een getal op basis van nul, om te verwijzen naar een teken of regel. In een besturingselement met één regel bewerken dat n tekens bevat, is de regelindex bijvoorbeeld nul en worden de tekens geïndexeerd van nul naar n-1. In een besturingselement met meerdere regels bewerken dat m-lijnen en n tekens bevat, worden de regels geïndexeerd van nul tot m-1 en worden de tekens geïndexeerd van nul naar n-1. Houd er rekening mee dat het indexeren van tekens regeleinden negeert.

Een toepassing kan het aantal tekens in een besturingselement bewerken bepalen door het WM_GETTEXTLENGTH bericht naar het besturingselement bewerken te verzenden. Dit bericht retourneert de lengte, in tekens (niet inclusief het null-teken) van de tekst in een besturingselement met één regel of meerdere regels. Het EM_LINELENGTH bericht retourneert de lengte, in tekens, van een regel die is opgegeven door de tekenindex van een teken in de regel. De geretourneerde lengte bevat geen geselecteerde tekens. Een toepassing kan deze berichten gebruiken in een bewerkingsbesturingselement met één regel of meerdere regels.

Het EM_GETFIRSTVISIBLELINE bericht retourneert de op nul gebaseerde index van de bovenste zichtbare regel in een besturingselement met meerdere regels, of de op nul gebaseerde index van het eerste zichtbare teken in een besturingselement voor bewerking met één regel. Een toepassing kan een regel van een besturingselement bewerken naar een buffer kopiëren door het EM_GETLINE bericht naar het besturingselement bewerken te verzenden. De lijn wordt opgegeven door de regelindex en het eerste woord van de ontvangende buffer bevat het maximum aantal bytes dat naar de buffer moet worden gekopieerd. De retourwaarde is het aantal gekopieerde bytes. Dit bericht kan ook worden gebruikt in een bewerkingsbesturingselement met één regel of meerdere regels.

Er zijn unieke berichten beschikbaar om de informatie over een regel in een besturingselement voor meerdere regels te retourneren. Het EM_GETLINECOUNT bericht retourneert het aantal regels in een besturingselement bewerken. Het EM_LINEFROMCHAR bericht retourneert de index van de regel die een opgegeven tekenindex bevat. Het EM_LINEINDEX bericht retourneert de index van het eerste teken in een opgegeven regel.

Tekst schuiven in een besturingselement bewerken

Als u schuiven in een besturingselement wilt implementeren, kunt u de automatische schuifstijlen gebruiken die worden besproken in Besturingselementtypen en -stijlen bewerken, of u kunt expliciet schuifbalken toevoegen aan het besturingselement bewerken. Als u een horizontale schuifbalk wilt toevoegen, gebruikt u de stijl WS_HSCROLL; als u een verticale schuifbalk wilt toevoegen, gebruikt u de stijl WS_VSCROLL. Een besturingselement voor bewerken met schuifbalken verwerkt zijn eigen schuifbalkberichten. Zie Schuifbalkenvoor gedetailleerde informatie over het toevoegen van schuifbalken om besturingselementen te bewerken.

Het systeem bevat drie berichten die een toepassing met schuifbalken naar een besturingselement kan verzenden. Het EM_LINESCROLL bericht kan zowel verticaal als horizontaal door een besturingselement met meerdere regels schuiven. De parameter lParam geeft het aantal regels aan dat verticaal moet schuiven vanaf de huidige regel en de parameter wParam geeft het aantal tekens aan dat horizontaal moet worden geschoven, beginnend bij het huidige teken. Het besturingselement bewerken bevestigt geen horizontale schuifberichten als het de stijl ES_CENTER of ES_RIGHT heeft. Het EM_LINESCROLL bericht is alleen van toepassing op besturingselementen voor bewerken met meerdere regels.

Het EM_SCROLL bericht schuift een besturingselement met meerdere regels verticaal. De parameter wParam geeft de schuifactie op. Het EM_SCROLL bericht is alleen van toepassing op besturingselementen voor bewerken met meerdere regels. EM_SCROLL heeft hetzelfde effect als het WM_VSCROLL bericht.

Het EM_SCROLLCARET bericht schuift de caret naar de weergave in een besturingselement voor bewerken.

Tabstops en marges instellen

Een toepassing kan tabstops instellen in een besturingselement voor meerdere regels bewerken met behulp van het EM_SETTABSTOPS bericht. (De standaardwaarde voor een tabstop is acht tekens.) Wanneer een toepassing tekst toevoegt aan het bewerkingsbesturingselement, genereren tabtekens in de tekst automatisch ruimte tot aan de volgende tabstop. Het EM_SETTABSTOPS bericht zorgt er niet automatisch voor dat het systeem de tekst opnieuw tekent. Hiervoor kan een toepassing de functie InvalidateRect aanroepen. Het EM_SETTABSTOPS bericht is alleen van toepassing op besturingselementen voor bewerken met meerdere regels.

Een toepassing kan de breedte van de linker- en rechtermarges voor een besturingselement bewerken instellen met behulp van het EM_SETMARGINS bericht. Nadat dit bericht is verzonden, wordt het besturingselement voor bewerken opnieuw getekend om de nieuwe marge-instellingen weer te geven. Een toepassing kan de breedte van de linker- of rechtermarge ophalen door het EM_GETMARGINS bericht te verzenden. Standaard zijn de besturingselementmarges zo breed ingesteld dat de grootste horizontale overhang van tekens (negatieve ABC-breedtes) geschikt is voor het huidige lettertype dat in het besturingselement wordt gebruikt.

Gebruikersinvoer verbergen

Een toepassing kan een wachtwoordteken in een besturingselement bewerken gebruiken om gebruikersinvoer te verbergen. Wanneer een wachtwoord is ingesteld, wordt het weergegeven in plaats van elk teken dat de gebruiker typt. Wanneer een wachtwoordteken wordt verwijderd, worden in het besturingselement de tekens weergegeven die de gebruiker typt. Als de toepassing een bewerkingsbesturingselement met één regel maakt met de stijl ES_PASSWORD, is het standaardwachtwoord een sterretje (*). Een toepassing kan het EM_SETPASSWORDCHAR bericht gebruiken om een ander wachtwoordteken te verwijderen of te definiëren en het EM_GETPASSWORDCHAR bericht om het huidige wachtwoordteken op te halen. Deze berichten zijn alleen van toepassing op besturingselementen voor bewerken met één regel.

Gehele getallen gebruiken

Er zijn twee functies voor het converteren van gehele getallen voor besturingselementen die zijn ontworpen om alleen getallen te bevatten. De functie SetDlgItemInt maakt de tekenreeksweergave van een opgegeven geheel getal (ondertekend of niet-ondertekend) en verzendt de tekenreeks naar een bewerkingsbesturingselement. SetDlgItemInt- retourneert geen waarde. De functie GetDlgItemInt maakt een geheel getal (ondertekend of niet-ondertekend) op basis van de tekenreeksweergave in een besturingselement voor bewerken. GetDlgItemInt- retourneert het gehele getal (of een foutwaarde).

Tekstbewerkingen ongedaan maken

Elk bewerkingsbesturingselement onderhoudt een vlag voor ongedaan maken die aangeeft of een toepassing de meest recente bewerking op het bewerkingsbesturingselement kan ongedaan maken (bijvoorbeeld het ongedaan maken van een tekstverwijdering). Met het besturingselement bewerken wordt de vlag ongedaan maken ingesteld om aan te geven dat de bewerking ongedaan kan worden gemaakt en opnieuw kan worden ingesteld om aan te geven dat de bewerking niet ongedaan kan worden gemaakt. Een toepassing kan de instelling van de vlag ongedaan maken bepalen door het besturingselement een EM_CANUNDO bericht te verzenden.

Een toepassing kan de meest recente bewerking ongedaan maken door het besturingselement een EM_UNDO bericht te verzenden. Een bewerking kan ongedaan worden gemaakt, mits er eerst geen andere bewerking voor bewerkingsbeheer plaatsvindt. De gebruiker kan bijvoorbeeld tekst verwijderen, de tekst vervangen (de verwijdering ongedaan maken) en de tekst opnieuw verwijderen (de vervanging ongedaan maken). Het EM_UNDO bericht is van toepassing op besturingselementen voor bewerkingen met één regel en meerdere regels en werkt altijd voor besturingselementen voor bewerkingen met één regel.

Een toepassing kan de vlag ongedaan maken van een besturingselement opnieuw instellen door het besturingselement een EM_EMPTYUNDOBUFFER bericht te verzenden. Het systeem stelt de vlag ongedaan maken automatisch opnieuw in wanneer een besturingselement voor bewerken een EM_SETHANDLE of WM_SETTEXT bericht ontvangt. De functie SetDlgItemText verzendt een WM_SETTEXT bericht.

Woord-einden en regeleinden verwerken

Een toepassing kan Wordwrap-functies gebruiken met besturingselementen voor bewerken met meerdere regels om het woord of woordfragment te zoeken dat moet worden verpakt naar de volgende regel. Met behulp van de standaardfunctie Wordwrap die door het systeem wordt geleverd, eindigen regels altijd op de spaties tussen woorden. Een toepassing kan een eigen Wordwrap-functie opgeven door een EditWordBreakProc Wordwrap-functie op te geven en het besturingselement bewerken een EM_SETWORDBREAKPROC bericht te verzenden. Een toepassing kan het adres van de huidige Wordwrap-functie ophalen door het besturingselement een EM_GETWORDBREAKPROC bericht te verzenden.

Een toepassing kan een besturingselement voor bewerken met meerdere regels om een zacht regeleinde (twee regelterugloop en een regelfeed) automatisch toe te voegen of te verwijderen aan het einde van tekstterugloopregels. Een toepassing kan deze functie in- of uitschakelen door het besturingselement bewerken een EM_FMTLINES bericht te verzenden. Dit bericht is alleen van toepassing op besturingselementen voor bewerken met meerdere regels en heeft geen invloed op een regel die eindigt op een vaste regeleinde (één regelterugloop en een regelfeed die door de gebruiker is ingevoerd). In besturingselementen voor bewerken met meerdere regels kan een toepassing ook de ES_WANTRETURN stijl opgeven om aan te vragen dat het systeem een regelterugloop invoegt wanneer de gebruiker op enter drukt in het besturingselement bewerken.

Punten en tekens ophalen

Als u het teken wilt bepalen dat het dichtst bij een opgegeven punt in het clientgebied van een besturingselement voor bewerken ligt, verzendt u het EM_CHARFROMPOS bericht naar het besturingselement. Het bericht retourneert de tekenindex en regelindex van het teken dat het dichtst bij het punt staat. Op dezelfde manier kunt u de coördinaten van het clientgebied van een opgegeven teken ophalen door het EM_POSFROMCHAR bericht te verzenden. Het bericht retourneert de x- en y-coördinaten van de linkerbovenhoek van het opgegeven teken.

Automatisch aanvullen van tekenreeksen

Automatisch aanvullen breidt tekenreeksen uit die gedeeltelijk zijn ingevoerd in een bewerkingsbesturingselement in volledige tekenreeksen. Wanneer een gebruiker bijvoorbeeld een URL begint in te voeren in het besturingselement Adres bewerken dat is ingesloten in de werkbalk van Windows Internet Explorer, wordt de tekenreeks uitgebreid tot een of meer volledige URL's die consistent zijn met de bestaande gedeeltelijke tekenreeks. Een gedeeltelijke URL-tekenreeks zoals 'microfoon' kan worden uitgebreid naar "https://www.microsoft.com" of "https://www.microsoft.com/windows". Automatisch aanvullen wordt meestal gebruikt met besturingselementen voor bewerken of met besturingselementen met een ingesloten besturingselement voor bewerken.

Zie de IAutoComplete en IAutoComplete2 interfacedocumentatie voor meer informatie.

Complex script in Besturingselementen bewerken

Een complex script is een taal waarvan het afgedrukte formulier niet op een eenvoudige manier is ingedeeld. Een complex script kan bijvoorbeeld bidirectionele rendering, contextuele vormgeving van glyphs of het combineren van tekens toestaan. De standaardbesturingselementen voor bewerken zijn uitgebreid ter ondersteuning van meertalige tekst en complexe scripts. Dit omvat niet alleen invoer en weergave, maar ook de juiste cursorverplaatsing over tekenclusters (bijvoorbeeld in het Thais- en Devanagari-script).

Een goed geschreven toepassing ontvangt deze ondersteuning automatisch, zonder wijziging. Nogmaals, u moet overwegen om ondersteuning toe te voegen voor de leesvolgorde van rechts naar links en de juiste uitlijning. In dit geval schakelt u de uitgebreide stijlvlagmen van het besturingselementvenster bewerken in om deze kenmerken te beheren, zoals wordt weergegeven in het volgende voorbeeld.

// ID_EDITCONTROL is the control ID in the resource file.
HANDLE hWndEdit = GetDlgItem(hDlg, ID_EDITCONTROL);
LONG lAlign = GetWindowLong(hWndEdit, GWL_EXSTYLE) ;

// To toggle alignment
lAlign ^= WS_EX_RIGHT ;

// To toggle reading order
lAlign ^= WS_EX_RTLREADING ;

Nadat u de lAlign waarde hebt ingesteld, schakelt u de nieuwe weergave in door de uitgebreide stijl van het besturingselementvenster als volgt in te stellen.

// This assumes your edit control is in a dialog box. If not, 
// get the edit control handle from another source.

SetWindowLong(hWndEdit, GWL_EXSTYLE, lAlign);
InvalidateRect(hWndEdit, NULL, FALSE);

Uniscribe is een andere set functies die nauwkeurige controle bieden voor het verwerken van complexe scripts. Zie Uniscribevoor meer informatie.