Transparente Static
-
Ich bins nochmal, das Problem ist folgendes: GetWindowRect() liefert mir die Schirmkoordinaten der StaticBox, ich brauch aber die Koordinaten in Bezug auf mein Fenster, deshalb wird der falsche Bereich "invalidatet". Gibt es da eine Funktion (bei MFC ScreenToClient(&CRect))....?
-
Du könntest evtl. auch das Static hooken und in WM_PAINT für den entsprechenden Ausschnitt InvalidateRect an das Parent senden
-
Gibt es keine Funktion die die Koordinaten umwandelt?
-
Ja, die gibt es - und sie heißt (wie du schon sagtest
) ScreenToClient (für hWnd musst du natürlich das Parent nehmen, für das du InvalidateRect aufrufen willst)
Falls du WM_PAINT hookst kannst du statt GetWindowRect auch rcPaint aus der PAINTSTRUCT-Struktur von BeginPaint verwenden
-
O.K. ich hab mich da ein bisschen dusselig ausgefrückt, ich meinte eine Funktion die z,B. ein ganzes Rechteck umwandeln kann.
P.S.Was heist den eigentlich "WM_PAINT hookst"?
-
Du kannst ja z.B. einfach nur ermitteln, wie weit du das RECT verschieben musst, und das dann z.B. mit OffsetRect machen
WM_PAINT hooken war vielleicht etwas blöd ausgedrückt. Ich meinte, dass du das Static subclasst und dann WM_PAINT abfängst und mit GetWindowRect die Koordinaten ermittelst (Begin-/ EndPaint solltest du aber wohl besser doch noch nicht selber aufrufen, sondern der orginal-WndProc überlassen - CallWindowProc)
-
hier ist dein problem:
return (LRESULT)GetStockObject(NULL_BRUSH);//kein HBRUSH zurückgeben
du darfst hier keinen NULL_BRUSH zurückgeben, sondern einen brush in der farbe deines fensters. mit dem NULL_BRUSH kann man nichts "überpinseln" ...
-
Dann ist es aber ja nicht mehr transparent
-
es geht doch darum, das der hintergrund genauso aussieht, wie das hauptfenster selbst - oder habe ich da jetzt was falsch verstanden ???
-
Ich nehme mal an, dass er im Hauptfenster ein Bitmap als Hintergrund verwendet