Device Context für WM_ERASEBKGND modifizieren
-
Hallo zusammen,
hab eine neue Frage bezüglich Windows API. Und zwar sub-classe ich momentan ein Fenster einer Fremdanwendung um ein bestimmtes Redraw-Verhalten zu erreichen. Das funktioniert auch soweit, meine wndProc sieht dabei so aus:
LRESULT CALLBACK hackedWndProc(HWND window, UINT Message, WPARAM wParam, LPARAM lParam) { switch (Message) { case WM_ERASEBKGND: return 1; } return CallWindowProc(oldWndProc, window, Message, wParam, lParam); }
Dadurch dass ich WM_ERASEBKGND abfange, wird verhindert dass Fenster welche ich in die Anwendung injecte redrawt werden. Allerdings soll der Rest des fremden Fensters schon noch redrawt werden, und zwar ganz normal.
Meine Idee wäre jetzt den Device Context per GetDC (bzw einfach über den wParam der WM_ERASEBKGND message) zu holen und das Rechteck des Child-Fensters, von welchem nicht der Hintergrund gelöscht werden soll, aus diesem auszuschließen. So dass dann quasi nur die Fläche um das child Fenster herum gelöscht wird.
Nur leider weiß ich nicht genau wie das geht, also aus dem (abgefangenem) DC das Rechteck des Childs abzuziehen... Jemand vielleicht eine Idee/eine Tip?
Schöne Grüße,
hs
-
Das Gebiet, dass gemalt wird, ist immer ein Rechteck. Du kannst 4 Rechtecke um das Childfenster herum getrennt malen, vorausgesetzt die Anwendung kann das. Die meisten Anwendungen malen einfach das gesamte Fenster und ignorieren das gegebene Rechteck. Schon mal überlegt ein Overlay zu benutzen?
-
Hi,
ich würde das eher so machen:
WindowProc( Message ) { CallWindowProc( oldWindow ); if( Message == WM_XYZ ) { DoSomething(); } return whatEver; }
D.h. Du rufst zuerst die alte Fensterprozedur auf, und machst dann Deinen Stuff, was auch immer für eine Schweinerei Du da tun willst.
mfg Martin