[win32] Klickdurchlässiges Window

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

[win32] Klickdurchlässiges Window

Beitrag 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é
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag 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
Benutzeravatar
125
Beiträge: 1322
Registriert: 19.09.2004 16:52
Wohnort: Neu Wulmstorf (Hamburg)
Kontaktdaten:

Re: [win32] Klickdurchlässiges Window

Beitrag 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
Bild
BildDas ist Tux. Kopiere Tux in deine Signatur und hilf ihm so auf seinem Weg zur Weltherrschaft.
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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:
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag 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?
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag 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.
Antworten