Clientarea eines Fensters transparent, aktualisiert nicht beim bewegen
-
bei InvalidateRect TRUE nehmen
-
Hab' ich auch probiert, läuft auch nicht. Sonst noch eine Idee?
-
case WM_SIZE: InvalidateRect(hWnd, NULL, TRUE); break;
das würde ich in die wndproc vom parent reinschreiben
-
window schrieb:
case WM_SIZE: InvalidateRect(hWnd, NULL, TRUE); break;
das würde ich in die wndproc vom parent reinschreiben
quatsch!! ich nehms zurück.
-
Aso, es handelt sich gar nich um nen child-window ?
Dann fusch doch ne Region zurecht und setze die mit SetWindowRgn()
oder WS_EX_LAYERED und mit SetLayeredWindowAttributes() die Transparenz einstellen.
-
Nein, jetzt in meinem Test handelt es sich um ein Standard-Hello-World Fenster, wo ich einfach den Clientbereich transparent haben möchte, was halt normal weiß ist. Hintergrund ist der, dass ich für ein Tabcontrol für jedes Tab ein Fenster erstelle, wo dann der Hintergrund transparent sein soll. Da hab' ich mir gedacht, dass ich erst einmal versuche einfach nur den Clientbereich von einem normalen Fenster transparent zu machen. Dann müsste man das ja auf die Child-Windows ebenso anwenden können. Jetzt geht es mir aber nicht mehr nur um die Child-Windows, sondern nun interessiert es mich auch, wie ich das bei einem Hauptfenster anstelle. Irgendwie muss es ja gehen, denn, wenn ich das Fenster minimiere und anschließend maximiere, dann wird es ja aktualisiert, dann muss es ja auch irgendwie beim bewegen und resizen gehen, denke ich. Nur leider finde ich da keine Möglichkeit.
-
Wenns nen Hauptfenster ist geht das mit WS_EX_LAYERED ziemlich einfach.
z.B. Einfach alles was transparent sein soll weiss zeichnen und dann mittels SetLayeredWindowAttributes() den ColorKey auf weiss setzen.Naja, irgendwie scheint mir Transparenz bei Windows nicht gescheit gelöst vor.
Die DC scheinen teilweise irgendwie den Inhalt des drunter-liegenden DCs zu übernehmen, wenn sich das drunter-liegende Fenster neugezeichnet hat. Wie das genau zusammenhängt hab ich bisher nirgendswo gefunden...Ideal wäre, wenn die DC wirklich genau an ein Fenster gebunden wären und ne Bitmap mit Alpha-Kanal drin wäre. Die WM_ERASEBKGND könnte man völlig weglassen.
Schön wäre außerdem wenn die komplette Windows-Oberfläche Double-Buffered wäre
Aber egal
-
Naja, bei SetLayeredWindowAttributes hab' ich das Problem, dass es erst ab Win2000 unterstützt wird, und ich das nicht unbedingt als Grenze haben möchte. Ich werd' dann wohl einfach noch ein wenig testen, schauen wir mal.
Vielen Dank auf jeden schonmal für die Antworten.
-
Dann wäre noch die SetWindowRgn()-Variante möglich.
Btw, evtl. interessant:
http://support.microsoft.com/gp/lifewin
-
Ja, Regions wären eine Möglichkeit, aber etwas aufwendig die Region genau auf die Childs anzupassen.
Mir geht es hier bei dem Hauptfenster jetzt nur in erster Linie darum, dass ich der Meinung, dass es irgendwie gehen muss, einen besonderen Einsatzzweck hab' ich da gar nicht, also nicht bei Hauptfenstern. Ich denke einfach nur, dass wenn ich schon die Möglichkeit habe einen Hollow-Brush zu verwenden, dass ich Windows ja dann auch irgendwie sagen können muss, dass bzw. wann der Hintergrund, der ja eigentlich nicht da sein dürfte neu gezeichnet werden muss, damit wieder der Transparenz-Effekt entsteht.
Naja, schauen wir mal.
Danke auf jeden.