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
- Üzenetek kezelése gombból
- Értesítési üzenetek gombból
- gomb színüzenetei
- gomb alapértelmezett üzenetfeldolgozási
- Kapcsolódó témakörök
Ü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.
|
||||||||||||||||
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.
Kapcsolódó témakörök