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 = return MA_NOACTIVATEANDEAT probiert. Dabei wurde das andere Fenster dann aber weiterhin deaktiviert (der Fensterrahmen schaltet auf inaktiv um). WM_NCHITTEST = return HTNOWHERE und WM_NCHITTEST = return HTTRANSPARENT 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/oder WM_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.


  • Mod

    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 einfach return HTTRANSPARENT drin stand.
    Und das hat irgendwie nicht funktioniert.
    Das war allerdings gleichzeitig mit dem WM_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.


  • Mod

    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.


Anmelden zum Antworten