Fenster soll beim anklicken nicht aktiv werden (=Klicks komplett ignorieren)
-
Welche Nachrichten muss man behandeln, wenn ein Fenster Klicks einfach komplett ignorieren soll?
Also wenn auf das Fenster draufgeklickt wird, dann soll das Fenster das vorher aktiv/fokus/foreground war eben aktiv/fokus/foreground bleiben.Ich hab's jetzt mal mit
WM_MOUSEACTIVATE
= returnMA_NOACTIVATEANDEAT
probiert. Dabei wurde das andere Fenster dann aber weiterhin deaktiviert (der Fensterrahmen schaltet auf inaktiv um).WM_NCHITTEST
= returnHTNOWHERE
undWM_NCHITTEST
= returnHTTRANSPARENT
haben auch nicht gefruchtet.On-Screen-Keyboards können das ja auch, also muss es irgendwie gehen. Ich kann aber nicht ausschliessen dass ich dabei einen Fehler gemacht habe. Also. Muss ich ne andere Message behandeln, oder sollte das über
WM_MOUSEACTIVATE
und/oderWM_NCHITTEST
gehen?
-
Versuchs mit WM_SETFOCUS, der gibt dir meistens das Fenster mit, das vorher den Focus hatte und mit SetFocus kannste das sofort wieder zurück setzen.
-
Er. Nö. Ich brauch schon eine Möglichkeit ohne dass der Fokus sich jemals ändert.
-
hustbaer schrieb:
Er. Nö. Ich brauch schon eine Möglichkeit ohne dass der Fokus sich jemals ändert.
Hallo
Je nachdem wie umfangreich das ganze wird
kannst Du das mittels Brute Force lösen.
http://forum.pellesc.de/index.php?topic=4005.0
(am Ende der Seite ist die Lösung)Diese Lösung hat erhebliche Vorteile
weil je nachdem welche controls Du verwendest die recht "zickig" sein können.Viel Spass
-
@pVoid
Du misverstehst.
Ich will den Fokus nicht zurücksetzen. Ich will ihn nie bekommen.Ich will einfach dass man das Fenster nicht per Klick aktivieren kann. Ich müsste den Klick dabei nichtmal mitbekommen.
Voraussetzung ist nur, dass der Klick "gefressen" wird, also nicht zum darunterliegenden Fenster durchgeht.Und eben das Fenster das davor den Fokus hatte diesen nie verliert, nichtmal kurz. Es darf keine Message bekommen aus der es schliessen könnte dass da irgendwas Fokus-bezogenes stattgefunden hast.
Das selbe gilt für die Z-Order und sonstige Dinge die man durch "auf ein Fenster draufklicken" so ändert.ps: trotzdem danke
-
Also eine Bildschirmtastatur könnte man mit WS_EX_NOACTIVATE realisieren,
wobei Dein Programm dann ja schon "clicks" mitbekommt es halt nur nicht den Fokus klaut.Sollte das das Problem nicht lösen bitte das Programm noch etwas genauer beschreiben
(ist es nur eine Art Hinweisschild oder soll es zeitweise nicht erreichbar sein, hat es überhaupt Eingabeelemente..)Viel Spass
-
EnableWindow(hwnd, 0) sorgt dafür, dass du den Focus nicht kriegst und auch keine Mausklicks.
-
Alle Fenster geben garantiert WM_NCHITTEST alle HTTRANSPARENT?
-
Es gibt nur ein (top-level) Fenster, und da hatte ich einen
ON_WM_NCHITTEST
drinnen, wo einfachreturn HTTRANSPARENT
drin stand.
Und das hat irgendwie nicht funktioniert.
Das war allerdings gleichzeitig mit demWM_MOUSEACTIVATE
Handler, vielleicht war auch das das Problem. Oder ich hab irgendwo irgendwas übersehen. (Der WM_NCHITTEST ist auf jeden Fall aufgerufen worden, soweit hab ich das schon überprüft.)Wobei
HTTRANSPARENT
sowieso nicht das ist was ich will - der Klick soll ja nicht "durchgehen" sondern gefressen werden - nur halt ohne irgendwas zu bewirken. Daher hab' ich da dann auch nicht weiter nachgeforscht.
-
Ich glaube, das geht nicht. Wissen tue ich es nicht.
Das Problem ist evtl., dass Du außerhalb eines Fensters einen Klick machst, und das dieser Klick "einfach immer" zum Verlust des Fokus führt, auch wenn damit, das andere Fenster nicht aktiv wird.
Evtl. ist es hier dann einfacher den Focus wieder zurück zu werfen.
Was evtl. gehen könnte wäre ein Maushook auf Deine Anwednung, die diesen Mausaktion vor der eigenen Anwednung frisst.