Nachrichten bei Buttonclicks von child-child-Buttons?
-
Ich spiele mit der Win32-API rum, dabei ist mir folgendes passiert und unklar. Ich habe ein eigenes klassifiziertes Hauptfenster, klar. Und darin meine Child-Fenster (Buttons). Nun, Events von Buttons landen in der Nachrichtenschleife vom eigenen Hauptfenster.
Wo landen aber Nachrichten, von Child-Child-Fenstern? Bsp.:
+===========================+ | MYWIN | | | | +-------------------+ | | | Static | | | | +-------------+ | | | | | Button | | | | | +-------------+ | | | +-------------------+ | | | +===========================+So, wenn ich Button in MYWIN habe, kommen die Events korrekt an. Packe ich Button als Child von Static rein, welches wiederrum Child von MYWIN ist, kommen bei MYWIN keine Button-Events an.
Hem, ich vermute mal das die Button-MSGs bei der Static-Nachrichtenschleife landen? (die ich aber nie explizit definiert habe)
Oder bin ich total auf dem Holzweg? Oder gibt es ein offizielles Win32-Common-Control das eine Art Panel darstellt? (habe einfach STATIC ohne Windowtext genommen)Artchi
PS: Leider habe ich meinen Source nicht zur Hand, vielleicht habe ich auch nur einen Bug?
-
wo die nachrichten hin gehen weis ich nicht, habe es nicht getestet. benutz doch mal winspector oder dependency walker um es heraus zufinden.
aber warum sollte der btn ein child von dem static sein? imho müsste doch beide ein child vom mainwnd sein.
CreateWindow("STATIC", ....., hwndMain);
CreateWindow("BUTTON", ....., hwndMain);Artchi schrieb:
IOder gibt es ein offizielles Win32-Common-Control das eine Art Panel darstellt? (habe einfach STATIC ohne Windowtext genommen)
afaik gibt es sowas nicht. die ausführung mach ich aber auch so

-
miller_m schrieb:
wo die nachrichten hin gehen weis ich nicht, habe es nicht getestet. benutz doch mal winspector oder dependency walker um es heraus zufinden.
aber warum sollte der btn ein child von dem static sein? imho müsste doch beide ein child vom mainwnd sein.
CreateWindow("STATIC", ....., hwndMain);
CreateWindow("BUTTON", ....., hwndMain);Weil die z-Reihenfolge stimmen muß, damit STATIC nicht BUTTON übermalt. Bzw. ich will das dadurch "garantieren". Ich habe mir auch schon überlegt, garkein STATIC physikalisch anzulegen, sondern meine Panel-Klasse (baue gerade einen Win32-Wrapper) nur ein virtuelles Panel ist. Da wäre dann der Hauptfenster-Parent wieder ein Muß.
-
Artchi schrieb:
Weil die z-Reihenfolge stimmen muß, damit STATIC nicht BUTTON übermalt. Bzw. ich will das dadurch "garantieren".
bei mir übermalt das static nicht den button, egal in welcher reihenfolge createwindow(..) angebe

für die z-order hilft dir
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/setwindowpos.aspwenn du nen wrapper baust und mach doch sowas und die z-order zu garantieren
struct button { void create(..., HWND* hWndInsertAfter = 0) { CreateWindow(..); if(hWndInsertAfter) SetWindowPos(..); } };