Seite 2 von 2

Verfasst: 19.10.2008 16:17
von rudolfo
Ok, stimmt.
Ich will ja nicht bohren, aber kannst Du mir erklären, warum nur weiss zu sehen ist, wenn ich den window hintergrund auf weiss stelle und danach ein image überlagere, das einen schwarzen text auf einem weissen streifen hat?
Ich möchte das gerne verstehen.

Verfasst: 19.10.2008 18:18
von Kaeru Gaman
Willkommen im Board.

> warum nur weiss zu sehen ist, wenn ich den window hintergrund auf weiss stelle und danach ein image überlagere, das einen schwarzen text auf einem weissen streifen hat?

zeig mal bitte den code, wie genau du das jetzt machst.
...oder meinst du deinen code von 15:20h?

Verfasst: 19.10.2008 23:05
von rudolfo
zeig mal bitte den code, wie genau du das jetzt machst.
...oder meinst du deinen code von 15:20h?
Ja, beim ersten code wenn man den kommentar beim SetWindowColor wegmacht. Dann ist alles nur weiss, obwohl doch das image mit schwarzem Hintergrund überlagert wird.

Verfasst: 19.10.2008 23:18
von Kaeru Gaman
verstehe...

mach mal ein Delay(2000) vor die Eventschleife, dann siehst du den auf das Fenster gedrawten Text für zwei Sekunden.
danach wird in der Eventschleife anscheinend als erstes Event ein Repaint ausgeführt,
das wurde von den SetWindowColor() befehl in die Eventqueue gestellt, aber noch nicht abgearbeitet,
das stellt die Fensterfarbe wieder her und übermalt so den temporären text.

eine mit SetWindowColor() gesetzte Fensterfarbe ist permanent, also sie wird vom System bei Bedarf wiederhergestellt.

direkt auf das Fenster gedrawtes ist das nicht, das wird beim nächsten Repaint übermalt.

deswegen, wenn du wo drauf malen willst und das bestand haben soll,
musst du das wie von ts angeregt als reaktion auf das #WM_PAINT Event machen,
oder du machst es auf ein Image und stellst das in einem Gadget dar.

bei letzterem musst du das Image erneut zuweisen, wenn du den Inhalt änderst.
(also auch eine Art "repaint" ausführen, aber dann eben auf eigene veranlassung)


wenn du in deinem ersten Beispielcode das #WM_PAINT Event manuell abarbeiten würdest,
nachdem du die fensterfarbe gesetzt hast bevor du drauf drawst,
dann würdest du das image über der Hintergrundfarbe sehen,
bis du mit einem anderen Fenster drüberfährst oder das Fenster aus dem Desktop bewegst.

... allerdings wäre das auch wieder pfusch, also entweder auf #WM_PAINT reagieren, oder ein Imagegadget bentzen.

Verfasst: 19.10.2008 23:29
von ts-soft
Das mit CreateImage erstelle Image ist mehr virtuell, also nicht sichtbar.
Sichbar wird es, wenn man es einem Output zuordnet, z.B. einem
ImageGadget, dort wirds auch automatisch neugezeichnet.
Auf einem Fenster oder Screen muß man es selber neuzeichnen, z.B. nach
einem #WM_Paint ereignis.

Wichtig wäre erstmal zu Wissen, für welchen Zweck möchtest Du etwas
malen, dann kann man auch sagen, wie man es am günstigsten Darstellt.

Den Rest, bzw. teilweise jetzt doppelt :mrgreen: hat Kaeru ja bereits gesagt.

Verfasst: 20.10.2008 21:35
von rudolfo
Doch ich glaub jetzt hab ichs einigermassen verstanden.
Man muss immer auch berücksichtigen, wie Windows die Windows behandelt. Naja, so ein ausgefuchstes message-handling muss ich mir erst erarbeiten.
Danke für die Antworten.