Transparente Editbox
-
Versuch doch noch mal genau das bisherige Verfahren und zusätzlich nach jedem EN_CHANGE machst Du ein Invalidate().
Dadurch habe ich auch das Löschen ins den Griff gekriegt. Ich habe es gerade noch mal probiert. Aber nun ist Schluß für heute...
-
Hmm, das wäre ziemlich blöd. Mit der WinAPI hat man doch sonst schon so viele Möglichkeiten... Ich habe über google schon vor Erstellen dieses Threads das gefunden. Nach Beschreibung genau das, was ich suche. Allerdings ist es in MFC (wie gesagt hab ich da keine Ahnung von) und die Kommentare unten drunter auf der Seite meinen teilweise, dass es sowieso nicht klappen würde. Testen kann ich es aber aus dem genannten Grund leider nicht

ph4nt0m
-
Also hab mir das Beispiel (von Deinem Link) mal angeguckt und finde das Resultat einfach nur lächerlich
. Ähm, das ist doch gar nicht 'echt' transparent... .Hab Dir bei Codeproject mal das rausgesucht, das sieht ganz gut aus:
- http://www.codeproject.com/dialog/pellucid.asp
- http://www.codeproject.com/staticctrl/transparentstatic.asp?df=100&forumid=13858&exp=0&select=431984PS: Das ist auch alles (leider
) MFC, aber ich bin der Meinung, wer die WinAPI und C++ beherrscht (naja, mit dem Begriff sollte man wohl vorsichtig umgehen), kann auch MFC-Code verstehen.Leider geht es mit SetLayeredWindowAttributes *nicht*...das wäre ne schöne Sache :p gewesen.
-
So, also durch das Reagieren auf EN_CHANGE funktioniert das Löschen durch Drücken der Backspacetaste schonmal super

Probleme gibt es aber leider noch, wenn ich den Text in der Editbox mit der Maus durch Ziehen erst markiere und anschließend den blau markierten Bereich wieder durch Ziehen verkleinere. Dann bleibt die blaue Markierung leider bestehen. Gibt es da eventuell auch eine weitere Nachricht, bei der man den Hintergrund löschen könnte?
Eine andere Frage: Ich habe neben dem Hintergrundbitmap auch zwei Bitmapbuttons in meinem Dialog. Das sind normale Buttons, allerdings ist das Flag BS_OWNERDRAW gesetzt. Als Reaktion auf WM_DRAWITEM werden diese dann gezeichnet.
Da aber zwischendurch ja jetzt durch das Editcontrol ein WM_ERASEBKGND an das Parent weitergeleitet wird, wird mein Bitmaphintergrund neugezeichnet, OHNE dass die Bitmapbuttons danach neugezeichnet werden. Sie sind also kurz gesagt nicht mehr zu sehen. Es wird nach dem WM_ERASEBKGND weder WM_DRAWITEM, noch WM_PAINT aufgerufen. Wie könnte ich diese Problem lösen?

ph4nt0m
-
Du musst das Löschen des Hintergrundes evtl. natürlich clippen.
Oder WS_CLIPCHILDREN verwenden für den Dialog.
-
Danke für die schnelle Antwort
Ich habe das Flag jetzt für den Dialog gesetzt. Nun gibt es beim Verschieben des Fensters bei den beiden Schaltflächen aber ein unschönes Flackern (keine Ahnung woran das wieder liegen soll
) und im Bereich der Editbox wird der Hintergrund überhaupt nicht gezeichnet. Der Dialog hat hier ein Loch
Der Grund ist klar: Durch WS_CLIPCHILDREN wird bei WM_ERASEBKGND ja auch genau dieser Bereich ausgespart, dabei soll ja gerade NUR hier der Hintergrund neugezeichnet werden.Es tut mir leid, wenn ich da langsam mit nerve. Ich hänge jetzt hier schon ewig mit diesem "eigentlich" trivialen Problem rum und halte dich damit irgendwie auf. Ich hätte am Anfang wirklich gedacht, dass das alles einfacher geht und nicht bei jedem Schritt wieder neue Probleme auftauchen

ph4nt0m
-
Dann verwende die Links auf Codeproject.