Delen via


Knopberichten

Een knop kan berichten verzenden naar het bovenliggende venster en een bovenliggend venster kan berichten verzenden naar een knop.

De volgende onderwerpen worden in deze sectie besproken.

Berichten verzenden naar knoppen

Een bovenliggend venster kan berichten verzenden naar een knop in een overlappend of onderliggend venster met behulp van de functie SendMessage, of het kan berichten verzenden naar een knop in een dialoogvenster met behulp van de SendDlgItemMessage, CheckDlgButton, CheckRadioButtonen IsDlgButtonChecked functies.

Een toepassing kan het BM_GETCHECK bericht gebruiken om de controlestatus van een selectievakje of keuzerondje op te halen. Een toepassing kan ook het BM_GETSTATE bericht gebruiken om de huidige statussen van de knop op te halen (de controlestatus, pushstatus en focusstatus). Als u informatie over een specifieke status wilt ophalen, gebruikt u een bitmasker op de geretourneerde statuswaarde.

Het BM_SETCHECK bericht stelt de status van een selectievakje of keuzerondje in; het bericht retourneert nul. Het BM_SETSTATE bericht stelt de drukstatus van een knop in; dit bericht retourneert ook nul. Het BM_SETSTYLE bericht wijzigt de stijl van een knop. Het is ontworpen voor het wijzigen van knopstijlen binnen een type (bijvoorbeeld het wijzigen van een selectievakje in een automatisch selectievakje). Het is niet ontworpen voor het wisselen tussen typen (bijvoorbeeld het wijzigen van een selectievakje in een keuzerondje). Een toepassing mag een knop niet wijzigen van het ene type naar het andere.

Een knop van de stijl BS_BITMAP of BS_ICON geeft een bitmap of pictogram weer in plaats van tekst. Het BM_SETIMAGE bericht koppelt een greep aan een bitmap of pictogram aan een knop. Het BM_GETIMAGE bericht haalt een ingang op voor de bitmap of het pictogram dat aan een knop is gekoppeld.

Een toepassing kan ook het DM_GETDEFID bericht gebruiken om de id op te halen van het standaardbesturingsknop in een dialoogvenster. Een toepassing kan het DM_SETDEFID bericht gebruiken om de standaardknop voor een dialoogvenster in te stellen.

Het aanroepen van de functie CheckDlgButton of CheckRadioButton is gelijk aan het verzenden van een BM_SETCHECK bericht. Het aanroepen van de functie IsDlgButtonChecked is gelijk aan het verzenden van een BM_GETCHECK bericht.

Berichten verwerken vanaf een knop

Meldingen van een knop worden verzonden als WM_COMMAND of WM_NOTIFY berichten. Informatie over welk bericht wordt gebruikt, vindt u op de referentiepagina voor elke melding.

Zie Berichten beherenvoor meer informatie over het afhandelen van berichten. Zie ook Knopberichten.

Meldingsberichten van knoppen

Wanneer de gebruiker op een knop klikt, verandert de status en verzendt de knop meldingscodes, in de vorm van WM_COMMAND berichten, naar het bovenliggende venster. Met een besturingselement voor een drukknop wordt bijvoorbeeld de BN_CLICKED meldingscode verzonden wanneer de gebruiker de knop kiest. In alle gevallen (met uitzondering van BCN_HOTITEMCHANGE), bevat het woord in lage volgorde van de parameter wParam de besturings-id, het woord in hoge volgorde van wParam de meldingscode en de parameter lParam bevat de besturingsvenstergreep.

Zowel het bericht als het antwoord van het bovenliggende venster zijn afhankelijk van het type, de stijl en de huidige status van de knop. Hieronder ziet u de meldingscodes voor knoppen die een toepassing moet bewaken en verwerken.

Meldingscode Beschrijving
BCN_HOTITEMCHANGE De muis heeft het clientgebied van een knop opgegeven of verlaten.
BN_CLICKED De gebruiker heeft op een knop geklikt.
BN_DBLCLK of BN_DOUBLECLICKED De gebruiker dubbelklikt op een knop.
BN_DISABLE Een knop is uitgeschakeld.
BN_PUSHED of BN_HILITE De gebruiker heeft een knop ingedrukt.
BN_KILLFOCUS De knop heeft de focus van het toetsenbord verloren.
BN_PAINT De knop moet worden geschilderd.
BN_SETFOCUS De knop heeft de toetsenbordfocus gekregen.
BN_UNPUSHED of BN_UNHILITE De knop wordt niet meer ingedrukt.

 

Een knop verzendt de BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUSen BN_UNPUSHED meldingscodes alleen als deze de stijl BS_NOTIFY heeft. BN_DBLCLK meldingscodes worden automatisch verzonden voor BS_USERBUTTON, BS_RADIOBUTTONen BS_OWNERDRAW knoppen. Andere knoptypen verzenden alleen BN_DBLCLK als ze de stijl BS_NOTIFY hebben. Alle knoppen verzenden de BN_CLICKED meldingscode, ongeacht hun knopstijlen.

Voor automatische knoppen verandert het systeem de drukstatus en schildert de knop. In dit geval verwerkt de toepassing doorgaans alleen de BN_CLICKED en BN_DBLCLK meldingscodes. Voor knoppen die niet automatisch zijn, reageert de toepassing doorgaans op de meldingscode door een bericht te verzenden om de status van de knop te wijzigen. Zie Berichten verzenden naar knoppenvoor informatie over het verzenden van berichten naar knoppen.

Wanneer de gebruiker een door de eigenaar getekende knop selecteert, verzendt de knop het bovenliggende venster een WM_DRAWITEM bericht met de id van het besturingselement dat moet worden getekend en informatie over de afmetingen en status ervan.

Knopkleurberichten

Het systeem biedt standaardkleurwaarden voor knoppen. Een toepassing kan de standaardwaarden voor deze kleuren ophalen door de functie GetSysColor aan te roepen of de waarden in te stellen door de functie SetSysColors aan te roepen. In de volgende tabel ziet u de standaardwaarden voor knopkleuren.

Waarde Element gekleurd
COLOR_BTNFACE Knopvlakken.
COLOR_BTNHIGHLIGHT Markeringsgebied (de boven- en linkerranden) van een knop.
COLOR_BTNSHADOW Schaduwgebied (de onder- en rechterranden) van een knop.
COLOR_BTNTEXT Normale (niet-gegrareerde) tekst in knoppen.
COLOR_GRAYTEXT Uitgeschakelde (grijze) tekst in knoppen. Deze kleur is ingesteld op 0 als het huidige beeldschermstuurprogramma geen ondersteuning biedt voor een effen grijze kleur.
COLOR_WINDOW Vensterachtergronden.
COLOR_WINDOWFRAME Raamkozijnen.
COLOR_WINDOWTEXT Tekst in vensters.

 

Het aanroepen van SetSysColors is echter van invloed op alle toepassingen. Daarom moet u deze functie niet aanroepen om knoppen voor uw toepassing aan te passen.

Het systeem verzendt een WM_CTLCOLORBTN bericht naar het bovenliggende venster van een knop voordat u een knop tekent. Dit bericht bevat een ingang voor de apparaatcontext van de knop en een ingang naar het onderliggende venster. Het bovenliggende venster kan deze grepen gebruiken om de tekst- en achtergrondkleuren van de knop te wijzigen. Alleen door de eigenaar getekende knoppen reageren echter op het bovenliggende venster dat het bericht verwerkt.

Knop Standaardberichtverwerking

De vensterprocedure voor de vooraf gedefinieerde vensterklasse voor knopbesturingselementen voert standaardverwerking uit voor alle berichten die de knopbesturingselementprocedure niet verwerkt. Wanneer de knopbesturingselementprocedure ONWAAR voor een bericht retourneert, controleert de vooraf gedefinieerde vensterprocedure de berichten en voert de standaardacties uit die worden vermeld in de volgende tabel.

Bericht Standaardactie
BM_CLICK Hiermee verzendt u de knop een WM_LBUTTONDOWN en een WM_LBUTTONUP bericht en verzendt u het bovenliggende venster een BN_CLICKED meldingscode.
BM_GETCHECK Retourneert de controlestatus van de knop.
BM_GETIMAGE Hiermee wordt een greep geretourneerd naar de bitmap of het pictogram dat is gekoppeld aan de knop of NULL- als de knop geen bitmap of pictogram heeft.
BM_GETSTATE Retourneert de huidige controlestatus, pushstatus en focusstatus van de knop.
BM_SETCHECK Hiermee stelt u de controlestatus in voor alle stijlen van keuzerondjes en selectievakjes. Als de parameter wParam groter is dan nul voor keuzerondjes, krijgt de knop de stijl WS_TABSTOP.
BM_SETIMAGE Koppelt de opgegeven bitmap- of pictogramgreep aan de knop en retourneert een ingang naar de vorige bitmap of het vorige pictogram.
BM_SETSTATE Hiermee stelt u de drukstatus van de knop in. Voor door de eigenaar getekende knoppen wordt een WM_DRAWITEM bericht verzonden naar het bovenliggende venster als de status van de knop is gewijzigd.
BM_SETSTYLE Hiermee stelt u de knopstijl in. Als het woord in lage volgorde van de parameter lParam is TRUE, wordt de knop opnieuw getekend.
WM_CHAR Hiermee wordt een selectievakje of automatisch selectievakje gecontroleerd wanneer de gebruiker op de plustoetsen (+) of gelijk (=) drukt. Hiermee schakelt u een selectievakje of automatisch selectievakje uit wanneer de gebruiker op de mintekentoets (–) drukt.
WM_ENABLE Tekent de knop.
WM_ERASEBKGND Hiermee wist u de achtergrond voor door de eigenaar getekende knoppen. De achtergronden van andere knoppen worden gewist als onderdeel van de WM_PAINT en WM_ENABLE verwerking.
WM_GETDLGCODE Retourneert waarden die aangeven welk type invoer wordt verwerkt door de standaardknopprocedure, zoals wordt weergegeven in de volgende tabel.
Knopstijl Retourneert
BS_AUTOCHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON | DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON

 

WM_GETFONT Retourneert een ingang naar het huidige lettertype.
WM_KEYDOWN Druk op de knop als de gebruiker op de SPATIEBALK drukt.
WM_KEYUP Hiermee wordt de muisopname vrijgegeven voor alle gevallen, behalve de TAB-toets.
WM_KILLFOCUS Hiermee verwijdert u de focusrechthoek van een knop. Voor drukknoppen en standaarddrukknoppen is de focusrechthoek ongeldig. Als de knop de muisopname bevat, wordt de opname losgelaten, wordt de knop niet geklikt en wordt er een pushstatus verwijderd.
WM_LBUTTONDBLCLK Hiermee wordt een BN_DBLCLK meldingscode verzonden naar het bovenliggende venster voor keuzerondjes en door de eigenaar getekende knoppen. Voor andere knoppen wordt een dubbelklik verwerkt als een WM_LBUTTONDOWN bericht.
WM_LBUTTONDOWN Markeert de knop als de positie van de muiscursor zich in de clientrechthoek van de knop bevindt.
WM_LBUTTONUP Laat de muisopname los als de knop de muis heeft vastgelegd.
WM_MOUSEMOVE Voert dezelfde actie uit als WM_LBUTTONDOWN, als de knop de muis vastlegt. Anders wordt er geen actie uitgevoerd.
WM_NCCREATE Hiermee verandert u een BS_OWNERDRAW knop in een BS_PUSHBUTTON knop.
WM_NCHITTEST Retourneert HTTRANSPARENT, als het knop besturingselement een groepsvak is.
WM_PAINT Hiermee tekent u de knop op basis van de stijl en de huidige status.
WM_SETFOCUS Hiermee tekent u een focusrechthoek op de knop die de focus krijgt. Voor keuzerondjes en automatische keuzerondjes wordt het bovenliggende venster een BN_CLICKED meldingscode verzonden.
WM_SETFONT Hiermee stelt u een nieuw lettertype in en werkt u het venster desgewenst bij.
WM_SETTEXT Hiermee stelt u de tekst van de knop in. In het geval van een groepsvak wordt het bericht over de bestaande tekst geschilderd voordat het groepsvak opnieuw wordt geschilderd met de nieuwe tekst.
WM_SYSKEYUP Hiermee wordt de muisopname vrijgegeven voor alle gevallen, behalve de TAB-toets.

 

De vooraf gedefinieerde vensterprocedure geeft alle andere berichten door aan de DefWindowProc--functie voor standaardverwerking.

Berichten beheren