2009-05-21 6 views
0

In meiner nativen Windows Mobile App habe ich ein Fenster, das einen Dialog erstellt. Sagen wir, mein Fenstergriff ist hMainWnd.Was würde dazu führen, dass ein Elternfenster nicht weiß, dass es einen untergeordneten Dialog hat?

erstelle ich den Dialog mit DialogBoxParam() und vorbei in hMainWnd als der Eltern-Dialog:

DialogBoxParam(_,_,hMainWnd,_,_); 

Lasst uns den Griff des Dialog sagen hDlgWnd ist. Aus dem Dialog GetParent() kehrt hMainWnd wie erwartet:

//We're inside the dialog created above 
HWND hParent = GetParent(hDlgWnd); //hParent == hMainWnd 

Hier ist das Merkwürdige, ruft GetWindow() die Kinder hMainWnd kehrt zu finden NULL, was bedeutet, dass sie keine Kinder hat. Ich würde die Funktion hDlgWnd

//We're inside the main window  
HWND hChild = GetWindow(hMainWnd, GW_CHILD); //hChild == NULL 

Wie kann ein Kind wissen seine Eltern zurückzukehren erwarten, wenn die Eltern nicht ihr Kind nicht kennt?

Antwort

3

GetWindow mit GW_CHILD anscheinend nicht Abkömmlinge Windows abrufen, nur unter Windows. Von MSDN:

Der abgerufene Handelte identifiziert die Kind Fenster an der Spitze der Z Ordnung, wenn das angegebene Fenster ein übergeordnetes Fenster ist; Andernfalls ist das abgerufene Handle NULL. Die Funktion prüft nur untergeordnete Fenster des angegebenen Fensters . Es untersucht nicht Nachkommenfenster

Was ist der Unterschied zwischen einem Kind und einem Nachkommen? Ich weiß es nicht, aber EnumChildWindows könnte Sie bekommen, was Sie brauchen.

+0

Sorry, WS_CHILD war ein Tippfehler. Ich habe es behoben und versucht, die Frage zu klären. Wie habe ich es gemacht? –

+0

+1 von mir. EnumChildWindows() ist was du willst. –

0

Ein Fenster ist entweder ein untergeordnetes Fenster (WS_CHILD-Stil) oder ein Fenster auf oberster Ebene.

Top-Level-Fenster haben kein übergeordnetes Fenster, aber sie haben möglicherweise ein Besitzerfenster. Untergeordnete Fenster haben einen Elternteil, aber keinen Besitzer.

Die Funktion GetParent() gibt das übergeordnete Element eines untergeordneten Fensters oder den Besitzer eines übergeordneten Fensters zurück. Daher wird es falsch benannt - es sollte GetParentOrOwner() heißen.

Also, was passiert ist, dass Sie den Besitzer Ihres Top-Level-Fensters von GetParent() erhalten, aber da es nicht wirklich das übergeordnete ist, ist hDlgWnd nicht Kind hMainWnd.

Verwandte Themen