Bitblt Frage
-
Hallo,
Also was ich gerne machen würde:
Funktionell ist es so ähnlich, als ob man im Texteditor einen Text markiert.
Rumherum wirds schwarz und der Text weiß.
Bei Schwarz/Weißem Sachen funzt das natürlich mit InvertRgn(..) super.
Aber ich möchte jetzt zb. auch daß gelbe Schrift auch weiß angezeigt wird...
usw.Gibt es da auch ne Möglichkeit das in einem Schritt zu tun?
Also der markierte Text IMMER diesselbe Farbe hat und der Hintergrund auch?!(Oder bleibt mir nichts anderes übrig als erst den Hintergrund zu malen
und dann die Schrift in der gewünschten Farbe drüber...)hoffe ihr versteht was ich meine!
TIA
Thommy
-
Eine sehr interessante Frage. Du willst also das Verhalten emulieren, das man bei fast allen Windows-Programmen beobachtet wenn man mit der Maus einen Text markiert. Der Hintergrund wird bläulich und der Text wird weiß, egal welche Farbe er vor dem Markieren hatte.
Ich werd mich da mal schlau machen und hier bescheid sagen wenn ich was gefunden habe; später werde ich auch selber so etwas programmieren müssen.
-
Normalerweise wird dazu nicht der schon bestehende Bildschirminhalt herangezogen, sondern einfach nochmal alles gezeichnet, mit den invertierten Farben eben.
-
Also mit invertierten Farben, wird bestimmt einfach ne InvertRgn drüber gemalt.
(Und zum entfernen der Markierung einfach nochmal drüber)Aber, wenn man (so wie Aziz und ich) nicht die invertierten Farben nehmen
will, sondern vorher selbst bestimmte, fällt mir grad auch keine andere
Möglichkeit ein...Aber wär cool (Aziz), wenn Du Deine Erkenntnisse (soweit vorhanden) hier dann
posten würdest
-
Also wie Ringding bereits hingewiesen hat, kann man den bestehenden Bildschirminhalt nicht zur markierten Darstellung eines Textes heranziehen. Mir würde da dennoch eine (komplizierte) Möglichkeit einfallen um einen Text mit dieser Methode markiert zu rendern. Ich stelle mir vor einen Backbuffer-DC als Kopie anzulegen und darauf gewisse Operationen auszuführen. Man könnte sich Zugriff auf die rohen Bitmap-Daten verschaffen und dort Hintergrundfarbe sowie Textfarbe mit Blau bzw. Weiß ersetzen. (Hört sich selbst für mich irgendwie nach einer Schnapsidee an
)Die andere, aber auch nicht gerade unkomplizierte Methode ist den Text mit den entsprechenden Farben erneut zu zeichnen. Das hört sich zwar einfach an, aber eine Textmarkierungs-Funktion zu implementieren ist wirklich eine sehr schwierige Angelegenheit.
Mit GetSysColor und den Makros COLOR_HIGHLIGHTTEXT (meistens weiß) COLOR_HIGHLIGHT (meistens blau) erhälts du die System-definierten Farben für das Rendern von markiertem Text.
-
(Hier war eine sinnlose Frage...)