Seite 1 von 1

[win32] Klickdurchlässiges Window

Verfasst: 24.03.2006 19:29
von real
Hi,

der Titel und die Frage sind etwas seltsam :freak:, aber durchaus realisierbar. Ich schaff's aber irgendwie nicht - vielleicht habt Ihr ja eine Idee.

Ich habe ein layered Window (hübsch transparent) und (als dessen Parent) ein unsichtbares Window erzeugt, um mein Programm nicht permanent in der Taskleiste anzuzeigen (ein grafisches Window auf dem Desktop sollte reichen). Da ich die linke Maustaste auf meinem transparenten Window nicht benötige (alle Interaktionen werden über die rechte Maustaste gemacht) und man den Desktop bzw. das darunterliegende Window durch die Transparenz noch gut erkennen kann wollte ich die einfache Tastenklicks auf das darunterliegende Window weitergeben - also so tun, als würde es mein Window gar nicht geben.

Es gibt bereits ein Programm, dass so etwas macht: ClocX, allerdings ist der Quellcode nicht frei verfügbar. :cry:

Habt Ihr vielleicht schonmal sowas programmiert oder wisst, wie ich das angehen kann?

Dank und Gruß
René

Verfasst: 24.03.2006 20:09
von FGK
@real

Wie wäre es mit PostMessage_() ??
Wenn du das Handle des drunterliegenden Fensters hast,
kannst du diesem Fenster die in deinem Fenster aufgelaufene
Message (z.b Links Klick usw.) "durchreichen". Damit reihst du
die Message in die MessageQueue des anderen Fensters ein.
Sollte eigentlich klappen


Gruß

FGK

Re: [win32] Klickdurchlässiges Window

Verfasst: 24.03.2006 21:01
von 125
real hat geschrieben: Ich habe ein layered Window
Hi,
geben layered Windows nicht voll automatisch alle Signale an das drunterliegende Window ab?

Gab hier letztens einen Thread mit beispiel zum auf dem Desktop zeichnen per Layered Window, müsste das sein was du suchst :)

mfg
125

Verfasst: 24.03.2006 21:03
von real
So ähnlich hatte ich mir das schon vorgestellt...

Hab auch ein konkretes Tutorial in C++ gefunden - damit sollte die Umsetzung nicht mehr schwierig sein. :allright:

Verfasst: 24.03.2006 21:08
von FGK
@real
So ähnlich hatte ich mir das schon vorgestellt...

Hab auch ein konkretes Tutorial in C++ gefunden - damit sollte die Umsetzung nicht mehr schwierig sein.
Zu welchem Posting gehört diese Aussage nun?

Verfasst: 25.03.2006 12:13
von real
@FGK: zu Deinem... :D

Beim Erstellen eines Layered Window per SetWindowLong_() gibt es zwei interessante Parameter:
#WS_EX_LAYERED zum Erstellen eines Layered Window und
#WS_EX_TRANSPARENT zum Aktivieren des "click thru".

Ich brauche mich bei #WS_EX_TRANSPARENT zwar nicht mehr darum zu kümmern, die Mouseklicks an darunterliegende Fenster weiterzuleiten. Aber ich muss mich dann darum kümmern, die MousePosition und evtl. Mouseklicks für die rechte Maustaste abzufragen, die ich ja im Programm bearbeiten will. Und ich Will die Mouseposition z.B. nicht über #WM_MOUSEMOVE abfragen, weil mein Programm dann bei jeder Mousebewegung die Message auswerten muss, und das kostet minimale Performance, die ich aber beim Zocken z.B. vergeuden würde.