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.
Text im Window
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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?
> 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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.
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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
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
hat Kaeru ja bereits gesagt.
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

PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
