Anfängerfrage... Child-Fenster über ihr handle ansprechen??
-
Hallo,
ich hab mit der Windows API noch so meine Schwierigkeiten.
Wenn ich beispielsweise ein Hauptfenster und ein Childfenster habe und
in dem Hauptfenster noch ein einfaches Button setze, dann hat Jedes Fenster
und auch das Button seinen eigenen handle.Soweit Klar...
Dann hab ich zwei Messageloops , eine für das Haupt und die andere für das
Childfenster.Auch noch logisch...
Ich frage das Button über WM_COMMAND und lparam , wparam ab, und möchte nun das
sich das Childfenster wenn das Button gedrückt wurde in seiner größe ändert.
Wenn ich aus der Messageloop des Hauptfensters aber mit SetWindowPos die größe
mit dem handle des Childfensters verändern will meckert mir der Compiler weil der
handle des Childfensters in einem anderen gültigkeitsbereich liegt.
Wenn ich den handle des Childfensters gleich global deklariere dann
kann ich zwar alles ohne Fehler compieren aber die größe des Fensters ändert sich auch nicht.doof...
Kann man für beide Fenster nur eine Messageloop benutzen?
Oder lassen sich Fenster (und Fensterobjekte) mit ihrem handle irgenwie von überall her ansprechen?
-
Wenn das Handle gloabl ist, dann sollte es schon funktionieren (wenn dein SetWindowPos-Aufruf korrekt ist). Wenn du das Handle des Parent hast kannst du dir aber auch mit GetDlgItem und der ID des Childs das Hanlde besorgen

-
OK,
hab mir das ganze noch mal angeschaut.
Hatte einen Tippfehler im code.aber empfiehlt es sich überhaupt die handles global zu machen??
Bei Klassen ist es doch auch so daß man globale Variablen vermeiden sollte .. oder??
-
die möglickeiten die du hast sind reichlich. da globale vars imho schlecht sind, könntest du vielleicht so was machen (wie flenders schon angedeutet hat
)// wndproc des hauptfensters static HWND hwndChild; //.. WM_CREATE: hwndChild = CreateWindow(...); WM_COMMAND: // im btn click SetWindowPos(GetDlgItem(hwndChild, ID_BUTTON), ....);BackBONE schrieb:
Kann man für beide Fenster nur eine Messageloop benutzen?
du könntest zb: die nachricht an das parent schicken
case WM_COMMAND: SendMessage(GetParent(hwnd), msg, wParam, lParam);BackBONE schrieb:
Oder lassen sich Fenster (und Fensterobjekte) mit ihrem handle irgenwie von überall her ansprechen?
jep
-
BackBONE schrieb:
aber empfiehlt es sich überhaupt die handles global zu machen??
war zu langsam mit meinem vorherigen post. generell sind globale vars schlecht.
bsp:
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=Global#Answ
bezieht sich zwar auf c++ macht aber keinen unterschied
-
In meinem Programm hab ich das Child Fenster und das Button außerhalb der
Messageloop vom Hauptfenster erstellt.Wenn ich versuche die Child-Objecte nach der Message WM_CREATE im Loop des Hauptfensters zu erstellen funzt das handle der Instanz nicht mehr.
Muß ich jetzt den handle der Instanz doch global machen ,oder komm ich da irgendwie drumrum?
Wenn ich das mache dann funktioniert SetWindowPos wieder nicht

obwhol der handle des Child Fensters doch im MessageLoop des Hauptfensters "sichtbar" sein müßte.wirklich verwirrend

-
BackBONE schrieb:
Muß ich jetzt den handle der Instanz doch global machen ,oder komm ich da irgendwie drumrum?
nein musst du nicht. als lparam bei wm_create wird ein pointer auf createsruct übergeben
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowmessages/wm_create.aspbsp:
if(!(hwndChild = CreateWindow( // ... ((LPCREATESTRUCT)lParam)->hInstance, NULL))) {
-
mache den Handle des ChildWindows innerhalb der Callback-Routine statisch. D.h.:
static HWND hWndChild;
so brauchst Du keine globale Variable und das Handle ist immer verfügbar.
-
DANKE! 
mit static gehts.
Das mit dem Pointer is noch n bischen zu fortgeschritten für mich.
Ich weiß zwar grob gesehen was ein Pointer ist, aber nicht genau wie man
ihn (den Pointer) sinnvoll in der Praxis einsetzt.Ich werd mich erstmal darauf beschränken einfache Win32 Apps zu schreiben die
keine wirklich sinnvollen sachen machen ... so der Übung halber.Phu... ich hab daß gefühl bis zum guten C++ Windows Programmierer ist es noch ein langer und steiniger Weg....

-
BackBONE schrieb:
Phu... ich hab daß gefühl bis zum guten C++ Windows Programmierer ist es noch ein langer und steiniger Weg....

das gefühl habe ich auch des öfteren
