GetParent() <- wo gebe ich an welches Fenster das Parent ist?
-
Hallo,
Wie der Titel schon vermuten lässt habe ich ein Problem mit der GetParent() Funktion. Und zwar versuche ich dem ersteller Fenster eine Nachricht zu übermitteln (SendMessage). Mein Funktionsaufruf aus der WndProc des Unterfensters war SendMessage(GetParent(hwnd),WM_*, wParam, lParam)
Das Funktioniert bei mir aber nicht muss ich irgendwo fest angeben welches Fenster den nun das Parent ist?
-
ist dein hwnd in der Funktion das Handle deines Hauptfenster, welches ja ein Child des Desktop ist, dann funktioniert es nicht, legst du aber ein Fenster an, welches als Parent Handle das deines Hauptfensters erhällt, dann funktioniert es.
-
Ich glaube du hast mich nicht ganz richtig verstanden
Ich will wissen wo muss ich den das Hwnd der Parents angeben muss???
-
das Parent giebts du bei CreateWindow/CreateWindowEx an, sollte das auch bei einem Unterfenster auf NULL sein, so ist für dieses auch der Desktop das Parent.
[cpp]
HWND CreateWindowEx(DWORD dwExStyle, // extended window style
LPCTSTR lpClassName, // pointer to registered class name
LPCTSTR lpWindowName, // pointer to window name
DWORD dwStyle, // window style
int x, // horizontal position of window
int y, // vertical position of window
int nWidth, // window width
int nHeight, // window height
HWND hWndParent, // handle to parent or owner window
HMENU hMenu, // handle to menu, or child-window identifier
HINSTANCE hInstance, // handle to application instance
LPVOID lpParam // pointer to window-creation data
);
[/cpp]
-
Genau das wollte ich wissen.
Das Prob ist nur das ich auch wenn ich da das HWND des Parents angebe GetParent im CHILD fehlschlägt. Hängt die Funktionsfähigkeit von GetParent noch von was anderem ab als von der angabe des HWNDs bei CreateWindow?
-
Eigentlich nicht!
Aber probier mal:(HWND)GetWindowLong(hwnd,GWL_HWNDPARENT);
-
Wie genau sieht denn das Fehlschlagen aus?!
-
flenders schrieb:
Wie genau sieht denn das Fehlschlagen aus?!
steht doch ganz oben!
-
MichaM. schrieb:
flenders schrieb:
Wie genau sieht denn das Fehlschlagen aus?!
steht doch ganz oben!
Dann scheine ich irgendwie gerade mit Blindheit geschlagen zu sein

Ich lese da nur, dass sein SendMessage nichts macht

-

@flenders
er schrieb, das an seinem Hauptfenster keine Message ankommt, wenn ein Childwindow diese an diesem Parent sendet, zu nächst lag es daran, das im Childwindow nicht sein Hauptfenster als Parent angegeben war, nun hat er es so, aber es geht trotzdem noch nicht. Sein Hauptfenster erhält keine Nachrichten, die von einem Unterfenster via SendMessage() gesendet werden.Tobias, du wirst heute Nachsitzen um Lesen zu üben!

-
Nein, das wirst du wohl tun müssen Michael.
-
Daraus kann man aber wirklich nicht viel sagen, da wir ja gar nicht wissen, wie sein SendMessage überhaupt genau aussieht - wenn ich das richtig verstanden habe, ist das Handle auf jeden Fall mal richtig, oder?
-
aa schrieb:
Nein, das wirst du wohl tun müssen Michael.
Geht nicht Frau Aa, ich muß noch mit der Katze von flenders Nachbarin gassie gehen.
OK, ist bissel wie nen Rätsel, was ich bisher verstanden habe, ist:
- er sendet mittels SendMessage() nachrichten aus einem Childwindow zu seinem Parent, das Parent-Handle will er via GetParent() holen.
- dies schlug fehl, da vermutlich das Childwindow beim CreateWindow unter ParentHWND nicht das Handle des Parents, sondern des Desktops erhielt.
- nun hat er beim Createwindow des Childs das Handle des Parents richtig gesetzt, aber denoch erhält das Parent keine Message, in der Form wie er es zuvor hatte.Wenn ich gewonnen habe, bitte meinen Gewinn an die Krebsaugen-Stiftung spenden.

-
Der Fehler ist nicht bei SendMessage zu suchen. Ich habe schon in einem anderem Programm Probleme mit der Funktion GetParent gehabt und es dort dann anders gelöst. Ich bin ziemlich sicher das der Fehler bei GetParent liegt.
Trozdem nochmal mein SendMessage Aufruf:
... SendMessage(GetParent(hwnd),WM_XYMESSAGE,0,0); ...
-
Hast du schon den Tipp von Micha ausprobiert? (GetWindowLong)
-
Ne aber das war ja auch nicht die Frage...
Kann es sein das man WS_CHILD mit angeben muss??? (ungetestet)
-
Also ich habe das mit GetWindowLong mal probiert und es funzt.
Ich würde tozdem gerne wissen woran es bei GetParent hängt
-
Das hast du schon selbst beantwortet, GetParent funktioniert nur bei Childs.
-
Also ich entnehme mal deiner Antwort das das nur mit WS_CHILD funktioniert. Oder nicht
-
flammenvogel schrieb:
Also ich entnehme mal deiner Antwort das das nur mit WS_CHILD funktioniert. Oder nicht
Das gibt man gewöhnlicherweise ja bei Childs auch an

-
@Flenders: man könnte aber nach der Beschreibung von hwndParent vermuten, das alle Fenster die hier nicht NULL bei CreateWindow übergeben bekommen Childs sind ...
(Da wo es Eltern sind auch Kinder sind ...)