Hozzászólás gyermek ablakot a szülő ablak

Ha a beadás állapotot vált, a funkció az eredeti ablak kap WM_COMMAND. Együtt az üzenet az ablak eljárást fogad és további információkat. Ezek a további opciók jelentése a következő:

- gyermek-ablak azonosítója (típus UINT);

- értesítési kódot (UINT);

- kezeli a gyermek ablakot (típus HWND).

• ID gyermek ablakot - ezt az értéket átadja a funkció

CreateWindow, amikor létrehoz munka ablakot.

• A fogantyú a gyermek ablakot - az értéket, amely a Windows visszatér a hívás CreateWindow.

• Bejelentési kód - ez egy kiegészítő kód, amely a gyermek ablakot a szülő ablak tájékoztatja pontosabb információt az üzenetet.

Állandók azonosítására különböző bejelentési kódokat kell meghatározni a header fájlokat a Windows és a következő előtagokat rendre: BN_ -

"Button", hu - "szerkesztés", LBN_ - "ListBox" CBN_ - "legördülő menüből", és SB_ - "görgetősáv".

Tekintsük a fragmentum az ablak eljárás a szülő ablakot, amelyben a feldolgozás történik a gomb megnyomásával, egy gyermek ablak azonosítója

HWND hChild = (HWND) lParam; // fogantyút a gyermek ablakot, ha (idCtl == == ID_buttoncode BN_CLICKED)

// gomb megnyomása

CloseWindow (hwnd); // bezárja a szülő

Hozzászólások szülőablak gyermeke ablakok

A szülő ablak is üzenetet küldeni a gyermek ablakok válaszul, hogy egy gyermek ablakot elvégzi a különböző tevékenységek. Ehhez tudni kell a kilincset a gyermek ablakot.

• benyújtása lehetséges, a rendes ablak üzenet (ek WM_ prefix) és meghatározott minden típusú ellenőrzés

Az állandók, amelyek azonosítják a különböző üzeneteket a gyermek kontroll ablakok a fejlécben megadott fájlok a Windows és a következő előtagokat rendre: BM_ - „gomb”, EM_ - „szerkesztés”, LB_ - „ListBox” CB_ - „legördülő menüből”.

Együttműködik a „görgető” osztályú ablakok használata különleges Set / Get-funkció

(.) Kétféleképpen üzeneteket küldeni.

• Rögzítse az üzenetet az alkalmazás sorban. Ez alapján a használata funkció

PostMessage. Ez a funkció teszi egy üzenetet az üzenet sorban az ablak megadott beállításokat, azonnal visszatér. rögzített

segítségre PostMessage funkció ki van választva, és az üzenet feldolgozásra kerül az üzenet hurok.

• Közvetlen átvitel az üzenet ablak funkció, átadva az üzenetet sorban. Ezt a módszert SendMessage funkciót. Ezzel szemben a PostMessage funkció SendMessage Függvényhívások ablak funkció, és visszaadja csak visszatérése után az ablak funkció, amely továbbítja az üzenetet.

Minden gyermek ablak ablak kilincs (HWND típus), és egy ablak azonosítója (típus UINT), amely egyedülálló a többiek. A tudás az egyik ilyen elem lehetővé teszi az alkalmazás számára, hogy egy másik.

• Ha tudja a fogantyút hWndChild gyermek ablakot, akkor kap annak azonosítója:

• Ön is használja más funkció (bár része a „Dlg” funkció neve utal az ablakon a párbeszéd, sőt, egy általános célú funkció):

• ismeretében id azonosító a gyermek ablakot, akkor kap egy fogantyú: HWND hWndChild = GetDlgItem (hWndParent, id);

Tekintsük az üzenetet az eredeti ablak HWND gyermek ablakot Edit „szerkesztés” osztályú. C szerkesztő ablak leíró hWndEdit továbbított üzenetet beállítás a maximális bemeneti karakterek (5 karakter):

statikus UINT ID_edit = 3;

statikus HWND hWndEdit;

Lánya az ablakot, és a bemeneti fókusz

Gyermek ellenőrzések megkapja a fókuszt, amikor rájuk kattint.

Amikor a gyermek vezérlőszekrény kap input fókusz, a szülő ablak elveszti azt;

Az összes billentyűzet küld a szülő már nem az ablakon, és egy leányvállalat vezérlő dobozt.

• Ez a helyzet felveti egy nyilvánvaló problémát: az alkalmazás elveszti felett az üzenetek feldolgozása a billentyűzetről.

Egy példa, hogy egy átfedő ablak nem tudja biztosítani a felhasználó számára az átmenetet a kontroll, hogy ellenőrizzék a nyilakkal és .

A megoldás erre a problémára az, hogy egy technika az úgynevezett létrehozását egy alosztálya az ablak (ablak alosztályokhoz, bontani al-osztályok, a telepítés az új ablak eljárás).

• Az ablak eljárás leányvállalatok ellenőrzés ablak található, a gyomrában a Windows.

Azonban lehetséges a címe az ablak eljárás meghívásával

GetWindowLong, amelynél az azonosító használunk paraméterként

A funkció meghívásával SetWindowLong nem csak kap a címét az ablak eljárás a gyermek ablakvezérlők, hanem meg egy új ablakhoz eljárást.

Például, az új ablak kezelések leányvállalatok ellenőrizzék az ablakok, ha kap billentyűleütés üzenetek és egyszerűen át a bemeneti fókusz SetFocus művelet függvényében a következő (vagy előző) gyermek ablakot ellenőrzéseket. A feldolgozás során is okozhatnak más típusú üzeneteket régi ablak eljárás megfelelő vezérlő ablakokat CallWindowProc funkciót.

Leány és színes ellenőrző ablak

Ha egymást átfedő fehér kirakati számos leányvállalat ellenőrzés ablakok, beleértve a gombok különböző stílusok, látni fogja, hogy a gombelem négyzeteket és rádiós kapcsolók nem igen vonzók - ugyanaz a szürke háttér, ami nem túl szép, hogy a fehér háttér a szülő ablak . Ez azért történik, mert

vezérlő doboz célja elsősorban kijelző a párbeszédpanelek,

és általában van egy szürke felület.

Ahhoz, hogy a gyermek ellenőrzések az ablakon nézett vonzó, meg kell

• vagy valamilyen módon változtatni a színét egy ablak, koordinálja azt a színek az ellenőrző ablak;

• vagy változtatni a színét vezérlő ablak.

Színének módosítása ablak

Nézzük az első utat, hogy megoldja a szín probléma. Pre megvitatják, hogy a Windows használja a rendszert színek (rendszer szín).

A Windows 25 támasz rendszer színeit, amelynek célja, hogy felhívja a különböző elemeket a képernyőn. Az alkalmazás kaphat, és állítsa be a jelenlegi értékek ezeket a színeket (az aktuális munkamenet Windows) alkalmazásával GetSysColor funkciók és SetSysColor azonosítók és a rendszer a színeket. Azonosítók rendszere színek előtaggal COLOR_, határozza meg a Windows header fájlokat.

• Például, a szín COLOR_BTNFACE a fő színe a felület a préselt gombok és a háttér színe megmaradt (az azonos színű használják a párbeszédpanelek és üzenetek). A COLOR_WINDOWTEXT színű zászlók és radiopereklyuchateley használunk a szöveg színét.

Annak megállapítására, az osztály a szülő ablakot a munkaterület háttér színét, akkor a rendszert, például COLOR_BTNFACE:

• A Windows megérti, hogy ha a mező értéke hbrBackground olyan alacsony, hogy valójában egy színrendszer, nem igazi a fogkefe nyelén. A Windows ebben az esetben van szükség, hogy használata során azonosítók rendszere szín hozzáadásával őket 1 (ezt az értéket nem volt egyenlő

• Ha a kijelzőn a szöveget a képernyőn a TextOut funkció, a Windows a háttér színét a szöveg (a színt, hogy elmossa a hátteret a szöveg) és a szöveg színét használja meghatározott értékek a készülék összefüggésben. Az alapértelmezett a fehér (háttér) és a fekete (szöveg) színes, függetlenül attól, hogy a rendszer a színek és a mezők hbrBackground ablak osztály szerkezetét.

Változtatni a háttér színét és a szöveg jelenik meg a munkaterületen a szülő ablak rendszer színes, szükséges, miután megkapta a fogantyú hdc eszköz keretében a szülő ablak az ablak, hogy hívja a funkció:

Ennek eredményeként, a háttér színét a munkaterületet az eredeti ablak háttérszíne, a szöveg és a szöveg színét egy vonalban vannak a színes gombok.

Megszokott a színe gyermek ablakvezérlők

Amikor a gyermek vezérlő doboz körülbelül felhívni a működési területen, akkor küldi a szülő ablak megfelelő eljárás üzenetet

WM_CTLCOLOR ... (például a gomb küld egy üzenetet WM_CTLCOLORBTN).

• Szülő ablakban alapján ez az üzenet lehet változtatni a színek,

aki használja az ablak eljárást a gyermek ablak elkészítésekor.

• A szülő ablak szabályozhatja a színeket a gyermek ablakok. Ez az üzenet feldolgozása információt kérhet leányvállalata ablakok színe és van egy másik módja, hogy megoldja a problémát, a következetlenség a színek.

Vegyük példának a színes gombok. Ha a gombot fogja felhívni a munkaterület, akkor üzenetet küld a szülő ablak eljárás WM_CTLCOLORBTN. Szülőablak alapján ez az üzenet lehet változtatni a színeket, amelyeket használni fognak ablakban eljárás kidolgozása során a gombok.