Knappmeddelanden

En knapp kan skicka meddelanden till det överordnade fönstret och ett överordnat fönster kan skicka meddelanden till en knapp.

Följande avsnitt beskrivs i det här avsnittet.

Skicka meddelanden till knappar

Ett överordnat fönster kan skicka meddelanden till en knapp i ett överlappande eller underordnat fönster med hjälp av funktionen SendMessage. eller så kan den skicka meddelanden till en knapp i en dialogruta med hjälp av SendDlgItemMessage, CheckDlgButton, CheckRadioButtonoch IsDlgButtonChecked funktioner.

Ett program kan använda meddelandet BM_GETCHECK för att hämta kryssrutans eller alternativknappens bocktillstånd. Ett program kan också använda meddelandet BM_GETSTATE för att hämta knappens aktuella tillstånd (kontrolltillstånd, push-tillstånd och fokustillstånd). Om du vill få information om ett visst tillstånd använder du en bitmask för det returnerade tillståndsvärdet.

Det BM_SETCHECK meddelandet anger kryssrutans eller alternativknappens bocktillstånd. meddelandet returnerar noll. Meddelandet BM_SETSTATE anger push-tillståndet för en knapp. det här meddelandet returnerar också noll. Meddelandet BM_SETSTYLE ändrar stilen på en knapp. Den är utformad för att ändra knappformat inom en typ (till exempel ändra en kryssruta till en automatisk kryssruta). Den är inte utformad för att ändra mellan typer (till exempel ändra en kryssruta till en alternativknapp). Ett program bör inte ändra en knapp från en typ till en annan.

En knapp i formatet BS_BITMAP eller BS_ICON visar en bitmapp eller ikon i stället för text. Det BM_SETIMAGE meddelandet associerar ett handtag till en bitmapp eller ikon med en knapp. Meddelandet BM_GETIMAGE hämtar ett handtag till bitmappen eller ikonen som är associerad med en knapp.

Ett program kan också använda meddelandet DM_GETDEFID för att hämta identifieraren för standardknappen i en dialogruta. Ett program kan använda meddelandet DM_SETDEFID för att ange standardknappen för en dialogruta.

Att anropa funktionen CheckDlgButton eller CheckRadioButton motsvarar att skicka ett BM_SETCHECK meddelande. Att anropa funktionen IsDlgButtonChecked motsvarar att skicka ett BM_GETCHECK meddelande.

Hantera meddelanden från en knapp

Meddelanden från en knapp skickas som antingen WM_COMMAND eller WM_NOTIFY meddelanden. Information om vilket meddelande som används finns på referenssidan för varje meddelande.

Mer information om hur du hanterar meddelanden finns i Kontrollera meddelanden. Se även Knappmeddelanden.

Meddelanden från knappar

När användaren klickar på en knapp ändras dess tillstånd och knappen skickar meddelandekoder i form av WM_COMMAND meddelanden till det överordnade fönstret. En push-knappkontroll skickar till exempel BN_CLICKED meddelandekod när användaren väljer knappen. I alla fall (förutom för BCN_HOTITEMCHANGE) innehåller wParam-parameterns lågordningsord kontrollidentifieraren, wParam- innehåller meddelandekoden och parametern lParam innehåller kontrollfönstrets handtag.

Både meddelandets och det överordnade fönstrets svar beror på knappens typ, format och aktuella tillstånd. Följande är knappmeddelandekoderna som ett program ska övervaka och bearbeta.

Meddelandekod Beskrivning
BCN_HOTITEMCHANGE Musen gick in i eller lämnade klientområdet för en knapp.
BN_CLICKED Användaren klickade på en knapp.
BN_DBLCLK eller BN_DOUBLECLICKED Användaren dubbelklickade på en knapp.
BN_DISABLE En knapp är inaktiverad.
BN_PUSHED eller BN_HILITE Användaren tryckte på en knapp.
BN_KILLFOCUS Knappen förlorade tangentbordets fokus.
BN_PAINT Knappen ska målas.
BN_SETFOCUS Knappen fick tangentbordets fokus.
BN_UNPUSHED eller BN_UNHILITE Knappen trycks inte längre.

 

En knapp skickar BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUSoch BN_UNPUSHED endast om den har BS_NOTIFY formatmall. BN_DBLCLK meddelandekoder skickas automatiskt för knapparna BS_USERBUTTON, BS_RADIOBUTTONoch BS_OWNERDRAW. Andra knapptyper skickar endast BN_DBLCLK om de har BS_NOTIFY formatmall. Alla knappar skickar BN_CLICKED meddelandekod oavsett knappformat.

För automatiska knappar ändrar systemet push-läget och målar upp knappen. I det här fallet bearbetar programmet vanligtvis endast BN_CLICKED och BN_DBLCLK meddelandekoder. För knappar som inte är automatiska svarar programmet vanligtvis på meddelandekoden genom att skicka ett meddelande för att ändra knappens tillstånd. Information om hur du skickar meddelanden till knappar finns i Skicka meddelanden till knappar.

När användaren väljer en ägarritad knapp skickar knappen sitt överordnade fönster ett WM_DRAWITEM meddelande som innehåller identifieraren för kontrollen som ska ritas och information om dess dimensioner och tillstånd.

Knappfärgsmeddelanden

Systemet innehåller standardfärgvärden för knappar. Ett program kan hämta standardvärdena för dessa färger genom att anropa funktionen GetSysColor eller ange värdena genom att anropa funktionen SetSysColors. I följande tabell visas standardvärdena för knappfärg.

Värde Elementfärgat
COLOR_BTNFACE Knappytor.
COLOR_BTNHIGHLIGHT Markera en knapps övre och vänstra kanter.
COLOR_BTNSHADOW Skuggområde (nederkant och höger kant) för en knapp.
COLOR_BTNTEXT Vanlig (icke-komprimerad) text i knappar.
COLOR_GRAYTEXT Inaktiverad (grå) text i knappar. Den här färgen är inställd på 0 om den aktuella visningsdrivrutinen inte stöder en helgrå färg.
COLOR_WINDOW Fönsterbakgrunder.
COLOR_WINDOWFRAME Fönsterrutor.
COLOR_WINDOWTEXT Text i fönster.

 

Men att anropa SetSysColors påverkar alla program, så du bör inte anropa den här funktionen för att anpassa knappar för ditt program.

Systemet skickar ett WM_CTLCOLORBTN meddelande till en knapps överordnade fönster innan en knapp ritas. Det här meddelandet innehåller ett handtag till knappens enhetskontext och ett handtag till det underordnade fönstret. Det överordnade fönstret kan använda dessa referenser för att ändra knappens text- och bakgrundsfärger. Men endast ägarritade knappar svarar på det överordnade fönstret som bearbetar meddelandet.

Knappen Standard för meddelandebearbetning

Fönsterproceduren för den fördefinierade knappkontrollfönsterklassen utför standardbearbetning för alla meddelanden som knappkontrollproceduren inte bearbetar. När knappkontrollproceduren returnerar FALSE- för ett meddelande kontrollerar den fördefinierade fönsterproceduren meddelandena och utför standardåtgärderna som anges i följande tabell.

Meddelande Standardåtgärd
BM_CLICK Skickar knappen en WM_LBUTTONDOWN och ett WM_LBUTTONUP meddelande och skickar det överordnade fönstret en BN_CLICKED meddelandekod.
BM_GETCHECK Returnerar knappens kontrolltillstånd.
BM_GETIMAGE Returnerar ett handtag till bitmappen eller ikonen som är associerad med knappen eller NULL- om knappen inte har någon bitmapp eller ikon.
BM_GETSTATE Returnerar det aktuella kontrolltillståndet, push-tillståndet och fokustillståndet för knappen.
BM_SETCHECK Anger kontrolltillståndet för alla alternativknappar och kryssrutor. Om parametern wParam är större än noll för alternativknappar får knappen WS_TABSTOP formatmall.
BM_SETIMAGE Associerar den angivna bitmappen eller ikonhandtaget med knappen och returnerar ett handtag till föregående bitmapp eller ikon.
BM_SETSTATE Anger knappens push-tillstånd. För ägarritade knappar skickas ett WM_DRAWITEM meddelande till det överordnade fönstret om knappens tillstånd har ändrats.
BM_SETSTYLE Anger knappformatet. Om lågordningsordet i parametern lParam är TRUEritas knappen om.
WM_CHAR Markerar en kryssruta eller en automatisk kryssruta när användaren trycker på plus-tangenterna (+) eller lika med (=). Avmarkerar en kryssruta eller automatisk kryssruta när användaren trycker på minusknappen (–).
WM_ENABLE Målar knappen.
WM_ERASEBKGND Raderar bakgrunden för ägarritade knappar. Bakgrunderna för andra knappar raderas som en del av WM_PAINT och WM_ENABLE bearbetning.
WM_GETDLGCODE Returnerar värden som anger vilken typ av indata som bearbetas av standardknappproceduren, enligt följande tabell.
Knappformat Returnerar
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 Returnerar ett handtag till det aktuella teckensnittet.
WM_KEYDOWN Trycker på knappen om användaren trycker på BLANKSTEG.
WM_KEYUP Släpper musinsamlingen för alla fall utom TAB-nyckeln.
WM_KILLFOCUS Tar bort fokusrektangeln från en knapp. För push-knappar och standardknappar är fokusrektangeln ogiltig. Om knappen har musfångst, frigörs avbildningen, knappen klickas inte och alla push-tillstånd tas bort.
WM_LBUTTONDBLCLK Skickar en BN_DBLCLK meddelandekod till det överordnade fönstret för alternativknappar och ägarritade knappar. För andra knappar bearbetas ett dubbelklick som ett WM_LBUTTONDOWN meddelande.
WM_LBUTTONDOWN Markerar knappen om musmarkörens position ligger inom knappens klientrektangeln.
WM_LBUTTONUP Släpper musfångst om knappen hade musen fånga.
WM_MOUSEMOVE Utför samma åtgärd som WM_LBUTTONDOWN, om knappen har musfångst. Annars utförs ingen åtgärd.
WM_NCCREATE Omvandlar alla BS_OWNERDRAW till en BS_PUSHBUTTON knapp.
WM_NCHITTEST Returnerar HTTRANSPARENT om knappkontrollen är en gruppruta.
WM_PAINT Ritar knappen enligt dess format och aktuella tillstånd.
WM_SETFOCUS Ritar en fokusrektangel på knappen för att få fokus. För alternativknappar och automatiska alternativknappar skickas det överordnade fönstret en BN_CLICKED meddelandekod.
WM_SETFONT Anger ett nytt teckensnitt och uppdaterar eventuellt fönstret.
WM_SETTEXT Anger knappens text. När det gäller en gruppruta målas meddelandet över den befintliga texten innan grupprutan ommålas med den nya texten.
WM_SYSKEYUP Släpper musinsamlingen för alla fall utom TAB-nyckeln.

 

Den fördefinierade fönsterproceduren skickar alla andra meddelanden till funktionen DefWindowProc för standardbearbetning.

kontrollera meddelanden