Transparentes Fenster als Folie/Overlay [wxWidgets]
-
Hallo Leute!
Vor Kurzem habe ich auf ein Problem von mir aufmerksam gemacht und um Tipps bzw. gebeten (Hier: http://www.c-plusplus.net/forum/viewtopic-var-t-is-224526-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html) und möchte dieses mit diesem Thread etwas erweitern.
Mittlerweile ist es kein Problem die Fenster zu suchen und das richtige mittels API zu finden. Nun möchte ich gerne mit wxWidgets über ein Fenster einer anderen Anwendung ein Fenster anzeigen um dort meine Infos zu painten. Dazu noch ein grober Ablauf:
1. Fenster suchen
2. Position und Größe ermitteln
3. In meiner App ein Dialog (transparent) erzeugen und das gefundene Fenster platzieren.
4. sobald mein Fenster platziert wurde, möchte ich Infos darauf ausgeben. Mein Fenster soll nur über das eine gefundene überlappen. Gibt es dazu eine Art Layer? Ich möchte also mein Fenster auf das gefunden projezieren. Die Fenster die daüber sind, sollen also auch nicht von meinem transparenten überlappt werden, sondern nur das gefundene soll überlappt werden.
5. Mein Fenster soll nicht unter in der Leiste erscheinen. Geht das mit wxWidgets oder muss ich die API nutzen?
Ich wäre sehr dankbar wenn mir jemand helfen könnte.
Danke sehr!!
-
extreme_001 schrieb:
Hallo Leute!
1. Fenster suchenWenn es wirklich eine 100% fremde Applikation ist, wird es hier einige Probleme geben. Du bekommst normalweise gar nicht mit, was ein anderes Programm macht.
Angenommen du schaffst es ein gültiges "Handle" zu bekommen/finden dann kannst du das mit vorhandenden LowLevel-wxRoutinen auf ein "wxWindow-Objekt" casten/umwandeln.
Die dafür notwendigen Techniken sind z.B. für Video-Overlays oder ActiveX-Inhalte gedacht.2. Position und Größe ermitteln
Mit dem wxWindow-Objekt (s.o.) kannst du alles anstellen was die Dokumentation hergibt, aber Achtung (evtl. Thread-Probleme mit dem ursprünglichen Owner).
3. In meiner App ein Dialog (transparent) erzeugen und das gefundene Fenster platzieren.
Geht ... Aber hier ist Weg2 eindeutig besser, direkt in den Context vom geklauten Fenster zu schreiben.
4. sobald mein Fenster platziert wurde, möchte ich Infos darauf ausgeben. Mein Fenster soll nur über das eine gefundene überlappen. Gibt es dazu eine Art Layer? Ich möchte also mein Fenster auf das gefunden projezieren. Die Fenster die daüber sind, sollen also auch nicht von meinem transparenten überlappt werden, sondern nur das gefundene soll überlappt werden.
Wenn du in der Lage bist Events abzufangen, kannst du ja auf alle Move, Minimize, Resize, ... -Events reagieren und dein transparenter Dialog verhält sich entsprechend.
Aber wenn du tatsächlich events abfängst, ist der Weg den "Canvas/Context" direkt zu manipulieren auch nicht mehr weit.5. Mein Fenster soll nicht unter in der Leiste erscheinen. Geht das mit wxWidgets oder muss ich die API nutzen?
Ja das geht, da gibts mehrere "Hacks" die aber platformspezifisch sind.