Wohin gehen Nachrichten?
-
Ich würde gerne ein paar Nachrichten abfangen.
Dazu muss ich aber wissen wohin diese gesendet werden.
Nun meine Frage:
Werden die Nachrichten von Editfeldern oder Buttons an die WindowProc
des Parentfensters gesendet oder wohin gehen die?
-
Jede Nachricht geht an das Fenster an die es bestimmt ist.
Wenn du die Nachrichten von einem Button oder einem Edit Feld "abfangen" willst dann such mal nach Subclassen. Da wirst du fündig.MfG schirrmie
-
die ganzen low-level messages gehen an die eigene wndproc des controls und das sendet dann wiederum eigene an das parent window...
um alle messages mitzukriegen kannst es z.b. 'subclassen' ...
-
Das heißt?
Wie soll das gehen?
Beispiel nach Möglichkeit
-
Beispiele gibt es genug im Netzt evtl. sogar im FAQ glaub ich.
Oder such halt nach SetWindowLong(...) das ist die Funktion die du dafür brauchst.MfG schirrmie
-
Siehe
hier
.
-
Ich hab es jetzt ausprobiert, aber mein Editfeld wird dann automatisch
ausgegraut und man kann nicht mehr hineinschreiben. Muss ich die
Funktionalität beim subclassen dann selber schreiben oder ist die in der
DefWndProc(...)???Mein Code dazu sieht so aus:
SetWindowLong(hMessage, GWL_WNDPROC, (long)MessageWndProc);LRESULT CALLBACK MessageWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { /* Nachrichten unterscheiden */ switch (uMsg) { /* In allen anderen Faellen */ default: { /* DefaultWindowProcess */ return DefWindowProc(hWnd, uMsg, wParam, lParam); } } /* 0 zurueck */ return 0; }
-
Du solltest dir das Beispiel nochmal etwas genauer ansehen. Dort wird der Rückgabewert von SetWindowLong(Ptr) und damit die bisherige WndProc gespeichert und dann in deiner neuen WindowProc über CallWindowProc aufgerufen (und nicht DefWindowProc)
-
Deine neu Definierte WndProc soll ja nur eine ergänzung zur alten darstellen.
Drum kannst die andere nicht einfach ausen vor lassen.mfg tobZel
-
Ja, jetzt hab ich es verstanden.
-
Du kannst aber auch theoretisch die vorherige Prozedur vollständig ersetzen. Du musst
dich dann in deiner Prozedur um alles selbst kümmern (Und kannst damit sogar aus einem
'EDIT' einen 'BUTTON' machen
).