Megosztás a következőn keresztül:


Gombüzenetek

A gombok üzeneteket küldhetnek a szülőablakba, a szülőablakok pedig üzeneteket küldhetnek egy gombra.

Ebben a szakaszban az alábbi témaköröket tárgyaljuk.

Üzenetek küldése gomboknak

A szülőablakok az SendMessage függvénnyel küldhetnek üzeneteket egy átfedésben lévő vagy gyermekablak egyik gombjára. vagy üzeneteket küldhet egy párbeszédpanel egyik gombjára a SendDlgItemMessage, CheckDlgButton, CheckRadioButtonés IsDlgButtonChecked függvények használatával.

Az alkalmazások a BM_GETCHECK üzenet használatával lekérhetik a jelölőnégyzet vagy a választógomb állapotát. Az alkalmazások a BM_GETSTATE üzenet használatával is lekérhetik a gomb aktuális állapotát (az ellenőrzési állapotot, a leküldési állapotot és a fókusz állapotát). Egy adott állapotra vonatkozó információk lekéréséhez használjon bitmaszkot a visszaadott állapotértéken.

A BM_SETCHECK üzenet egy jelölőnégyzet vagy választógomb állapotát állítja be; az üzenet nullát ad vissza. A BM_SETSTATE üzenet beállítja egy gomb leküldéses állapotát; ez az üzenet szintén nulla értéket ad vissza. A BM_SETSTYLE üzenet megváltoztatja a gomb stílusát. A gombstílusok típuson belüli módosítására szolgál (például egy jelölőnégyzet automatikus jelölőnégyzetre történő módosítására). Ez nem a típusok közötti váltásra szolgál (például egy jelölőnégyzetet egy választógombra). Az alkalmazások nem módosíthatják a gombokat egyik típusról a másikra.

A BS_BITMAP vagy BS_ICON stílus gombja szöveg helyett bitképet vagy ikont jelenít meg. A BM_SETIMAGE üzenet egy fogópontot egy bitképhez vagy ikonhoz társít egy gombbal. A BM_GETIMAGE üzenet lekéri a gombhoz társított bitképhez vagy ikonhoz tartozó fogópontot.

Az alkalmazások a DM_GETDEFID üzenet használatával is lekérhetik az alapértelmezett leküldéses gomb vezérlőelem azonosítóját egy párbeszédpanelen. Egy alkalmazás a DM_SETDEFID üzenettel beállíthatja egy párbeszédpanel alapértelmezett leküldéses gombját.

A CheckDlgButton vagy CheckRadioButton függvény meghívása egyenértékű BM_SETCHECK üzenet küldésével. A IsDlgButtonChecked függvény meghívása egyenértékű BM_GETCHECK üzenet küldésével.

Üzenetek kezelése gombból

A gombról érkező értesítéseket WM_COMMAND vagy WM_NOTIFY üzenetként küldi el a rendszer. A használt üzenetről az egyes értesítések referenciaoldalán tájékozódhat.

További információ az üzenetek kezeléséről: Üzenetek vezérlése. Lásd még: Gombüzenetek.

Értesítési üzenetek a gombokról

Amikor a felhasználó rákattint egy gombra, megváltozik az állapota, és a gomb értesítési kódokat küld WM_COMMAND üzenetek formájában a szülőablakba. A leküldéses gomb vezérlője például minden alkalommal elküldi a BN_CLICKED értesítési kódot, amikor a felhasználó kiválasztja a gombot. A BCN_HOTITEMCHANGEkivételével minden esetben a wParam paraméter alacsonyrendű szava tartalmazza a vezérlőazonosítót, a wParam magasrendű szó tartalmazza az értesítési kódot, az lParam paraméter pedig a vezérlőablak leíróját.

Az üzenet és a szülőablak válasza a gomb típusától, stílusától és aktuális állapotától függ. Az alábbiakban azokat a gombértesítési kódokat követjük, amelyeket az alkalmazásnak figyelnie és feldolgoznia kell.

Értesítési kód Leírás
BCN_HOTITEMCHANGE Az egér egy gomb ügyfélterületét adta meg vagy hagyta el.
BN_CLICKED A felhasználó egy gombra kattintott.
BN_DBLCLK vagy BN_DOUBLECLICKED A felhasználó duplán kattintott egy gombra.
BN_DISABLE Egy gomb le van tiltva.
BN_PUSHED vagy BN_HILITE A felhasználó leküldött egy gombot.
BN_KILLFOCUS A gomb elvesztette a billentyűzet fókuszát.
BN_PAINT A gombot meg kell festeni.
BN_SETFOCUS A gomb a billentyűzet fókuszát nyerte el.
BN_UNPUSHED vagy BN_UNHILITE A gombot a rendszer már nem küldi el.

 

Egy gomb csak akkor küldi el a BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUSés BN_UNPUSHED értesítési kódokat, ha az BS_NOTIFY stílussal rendelkezik. BN_DBLCLK értesítési kódok automatikusan el lesznek küldve BS_USERBUTTON, BS_RADIOBUTTONés BS_OWNERDRAW gombokhoz. Más gombtípusok csak akkor küldenek BN_DBLCLK, ha BS_NOTIFY stílussal rendelkeznek. Minden gomb a gombstílusától függetlenül elküldi az BN_CLICKED értesítési kódot.

Automatikus gombok esetén a rendszer megváltoztatja a leküldési állapotot, és festi a gombot. Ebben az esetben az alkalmazás általában csak a BN_CLICKED és BN_DBLCLK értesítési kódokat dolgozza fel. A nem automatikus gombok esetében az alkalmazás általában úgy válaszol az értesítési kódra, hogy üzenetet küld a gomb állapotának módosításához. Az üzenetek gomboknak való küldésével kapcsolatos információkért lásd: Üzenetek küldése a gomboknak.

Amikor a felhasználó kiválaszt egy tulajdonos által rajzolt gombot, a gomb egy WM_DRAWITEM üzenetet küld a szülőablakának, amely tartalmazza a megrajzolandó vezérlő azonosítóját, valamint a méretével és állapotával kapcsolatos információkat.

Gomb színüzenetei

A rendszer alapértelmezett színértékeket biztosít a gombokhoz. Az alkalmazások a GetSysColor függvény meghívásával vagy a SetSysColors függvény meghívásával lekérhetik a színek alapértelmezett értékeit. Az alábbi táblázat az alapértelmezett gombszín értékeket mutatja.

Érték Elem színes
COLOR_BTNFACE Gombos arcok.
COLOR_BTNHIGHLIGHT Egy gomb kiemelési területe (a felső és a bal széle).
COLOR_BTNSHADOW Egy gomb árnyékterülete (alsó és jobb széle).
COLOR_BTNTEXT Normál (nem formázott) szöveg a gombokban.
COLOR_GRAYTEXT Letiltott (szürke) szöveg a gombokban. Ez a szín 0 értékre van állítva, ha az aktuális megjelenítési illesztőprogram nem támogatja az egyszínű szürke színt.
COLOR_WINDOW Ablakháttér.
COLOR_WINDOWFRAME Ablakkeretek.
COLOR_WINDOWTEXT Szöveg az ablakokban.

 

Az SetSysColors hívása azonban minden alkalmazásra hatással van, ezért ezt a függvényt nem érdemes meghívni az alkalmazás gombjainak testreszabásához.

A rendszer egy gomb rajzolása előtt WM_CTLCOLORBTN üzenetet küld egy gomb szülőablakának. Ez az üzenet egy fogópontot tartalmaz a gomb eszközkörnyezetéhez és egy fogópontot a gyermekablakhoz. A szülőablak ezen fogópontok használatával módosíthatja a gomb szövegét és háttérszíneit. Azonban csak a tulajdonos által rajzolt gombok válaszolnak az üzenetet feldolgozó szülőablakra.

Gomb alapértelmezett üzenetfeldolgozása

Az előre definiált gombvezérlő ablakosztály ablakeljárása az összes olyan üzenet alapértelmezett feldolgozását végzi, amelyet a gombvezérlési eljárás nem dolgoz fel. Amikor a gombvezérlési eljárás HAMIS ad vissza bármilyen üzenethez, az előre definiált ablakművelet ellenőrzi az üzeneteket, és végrehajtja az alábbi táblázatban felsorolt alapértelmezett műveleteket.

Üzenet Alapértelmezett művelet
BM_CLICK Elküldi a gombot egy WM_LBUTTONDOWN és egy WM_LBUTTONUP üzenetet, és elküldi a szülőablaknak egy BN_CLICKED értesítési kódot.
BM_GETCHECK A gomb ellenőrzési állapotát adja vissza.
BM_GETIMAGE A gombhoz vagy NULL társított bitképhez vagy ikonhoz visszaad egy fogópontot, ha a gomb nem tartalmaz bitképet vagy ikont.
BM_GETSTATE A gomb aktuális ellenőrzési állapotát, leküldési állapotát és fókuszállapotát adja vissza.
BM_SETCHECK Beállítja a választógombok és a jelölőnégyzetek összes stílusának állapotát. Ha a wParam paraméter nagyobb, mint nulla a választógombok esetében, a gomb WS_TABSTOP stílust kap.
BM_SETIMAGE A megadott bitképet vagy ikonfogópontot társítja a gombhoz, és egy fogópontot ad vissza az előző bitképhez vagy ikonhoz.
BM_SETSTATE Beállítja a gomb leküldési állapotát. Tulajdonos által rajzolt gombok esetén a rendszer WM_DRAWITEM üzenetet küld a szülőablakba, ha a gomb állapota megváltozott.
BM_SETSTYLE Beállítja a gombstílust. Ha az lParam paraméter alacsonyrendű szava IGAZ, a gomb újra lesz adva.
WM_CHAR Bejelöli a jelölőnégyzetet vagy az automatikus jelölőnégyzetet, amikor a felhasználó lenyomja a plusz (+) vagy az egyenlő (=) billentyűket. Törli a jelölőnégyzetet vagy az automatikus jelölőnégyzetet, amikor a felhasználó lenyomja a mínusz (–) billentyűt.
WM_ENABLE Kifesti a gombot.
WM_ERASEBKGND Törli a tulajdonos által rajzolt gombok hátterét. A többi gomb háttere a WM_PAINT és WM_ENABLE feldolgozás részeként törlődik.
WM_GETDLGCODE Olyan értékeket ad vissza, amelyek az alapértelmezett gombművelet által feldolgozott bemenet típusát jelzik az alábbi táblázatban látható módon.
Gombstílus Visszatér
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 Egy fogópontot ad vissza az aktuális betűtípushoz.
WM_KEYDOWN Nyomja le a gombot, ha a felhasználó lenyomja a SZÓKÖZ billentyűt.
WM_KEYUP Az egérrögzítést a TAB billentyű kivételével minden esetben felszabadítja.
WM_KILLFOCUS Eltávolítja a fókusz téglalapot egy gombról. A leküldéses gombok és az alapértelmezett leküldéses gombok esetében a fókusz téglalapja érvénytelen. Ha a gomb rendelkezik az egérrögzítési funkcióval, a rögzítés felszabadul, a gomb nem kattint, és a leküldéses állapot el lesz távolítva.
WM_LBUTTONDBLCLK Egy BN_DBLCLK értesítési kódot küld a szülőablakba a választógombok és a tulajdonos által rajzolt gombok számára. Más gombok esetén a dupla kattintás WM_LBUTTONDOWN üzenetként lesz feldolgozva.
WM_LBUTTONDOWN Kiemeli a gombot, ha az egérmutató pozíciója a gomb ügyfél téglalapján belül van.
WM_LBUTTONUP Felszabadítja az egérrögzítést, ha a gombon volt az egérrögzítés.
WM_MOUSEMOVE Ugyanazt a műveletet hajtja végre, mint WM_LBUTTONDOWN, ha a gomb rendelkezik az egérrögzítéssel. Ellenkező esetben a művelet nem történik meg.
WM_NCCREATE Bármely BS_OWNERDRAW gombot BS_PUSHBUTTON gombmá alakít.
WM_NCHITTEST A HTTRANSPARENT értéket adja vissza, ha a gombvezérlő egy csoportmező.
WM_PAINT A gombot stílusának és aktuális állapotának megfelelően rajzolja meg.
WM_SETFOCUS Fókusz téglalap rajzolása a fókuszt húzó gombon. A választógombok és az automatikus választógombok esetében a szülőablak egy BN_CLICKED értesítési kódot küld.
WM_SETFONT Beállít egy új betűtípust, és igény szerint frissíti az ablakot.
WM_SETTEXT Beállítja a gomb szövegét. Csoportmező esetén az üzenet átfesti az előző szöveget, mielőtt újrafestené a csoportmezőt az új szöveggel.
WM_SYSKEYUP Az egérrögzítést a TAB billentyű kivételével minden esetben felszabadítja.

 

Az előre definiált ablak eljárás minden más üzenetet továbbít a DefWindowProc függvénynek az alapértelmezett feldolgozáshoz.

Üzenetek vezérlése