onmouseover bei einem static



  • Also ich habe nun nur einmal die Prüfung des RECTs vom Static drin... und zwar bei WM_INITDIALOG!



  • Original erstellt von TKool:
    Hmm, ich habe das jetzt auch mal getestet und die Lösung mittels Sub-Classing
    scheint mir eindeutig besser und eleganter zu sein.
    Wenn ich mir anschaue wieviele WM_MOUSEMOVE gesendet werden, dann wird
    mir schon fast anders beim Gedanken wie oft dort unnötig auf das RECT vom static geprüft wird...
    Da ist die Lösung mittels Sub-Classing deutlich besser für die Performance.

    Nochmal für die Langsamen (;)): man braucht das Rect nicht immer im WM_MOUSEMOVE zu füllen. Das geht auch in WM_CREATE direkt nach CreateWindow(). Insofern ist das "Performance-Problem" gelöst.



  • Original erstellt von CQ:
    Also ich habe nun nur einmal die Prüfung des RECTs vom Static drin... und zwar bei WM_INITDIALOG!

    Äh ja, oder so. 😉



  • Nochmal für die Langsamen (): man braucht das Rect nicht immer im WM_MOUSEMOVE zu füllen. Das geht auch in WM_CREATE direkt nach CreateWindow(). Insofern ist das "Performance-Problem" gelöst.

    Danke für die Blumen, aber du verstehst nicht ganz.
    Das man das RECT nur einmal füllen muss ist klar nur ist deine Lösung nicht sonderlich geschickt.
    Natürlich geht es so, aber es ist nicht optimal gelöst, nur bequem.
    Dein Zweig im WM_MOUSEMOVE wird zig mal umsonst abgearbeitet.
    Das halte ich nicht für optimal und schon gar nicht im Sinne des Windows-Konzeptes der Nachrichten.
    Naja, wenn man sich vor dem SubClassing herumdrücken will,
    dann muss man es wohl so machen..

    Wenn du den Mausklick auf einem Button überprüfst, machst du das dann auch so?



  • Du meinst, es wird andauernd überprüft, ob der Cursor im Rect ist? Ja, da hast du recht. Das ist sicher etwas langsamer als das Subgeclasse. Jedoch muss Windows das beim SubClassing ja auch immer wieder überprüfen - ich meine, über welchem Fenster nun das WM_MOUSEMOVE stattfindet. Da das aber low level ist, ist es sicherlich auch schneller. Insofern nehme ich die Blumen gerne zurück. Dann kann ich sie an die Frau meines Herzens weiterreichen. 😉



  • Original erstellt von TKool:
    Wenn du den Mausklick auf einem Button überprüfst, machst du das dann auch so?

    Na, wozu gibt es denn WM_COMMAND?! 😉



  • Original erstellt von WebFritzi:
    Na, wozu gibt es denn WM_COMMAND?! 😉

    Warum denn?
    Nach deiner Methode schaut man bei jedem Mausklick ob die
    Position der Maus innerhalb des RECTs vom Button ist und macht dann die Aktion..



  • @TKool
    Ich glaube, du hattest mich noch nicht richtig verstanden. ICH HABE NACHGEGEBEN, UND FINDE JETZT AUCH DIE SUBCLASSING-METHODE BESSER. 🙂 Bei einem Button finde ich also auch die Notify-Methode per WM_COMMAND besser. Heißt: WIR SIND UNS EINIG. 🙂



  • SS_NOTIFY als Flag des Childs setzen, dann sollten die Mausmessages durchkommen



  • Oh, Tschuldigung. Zum einen ist das Problem schon was länger her und zum anderen habe ich glatt die mittlere Seite überlesen, wo das schon stand.... Ich sollte doch lieber schlafen gehen jetzt.... 🙄



  • schrei doch hier nicht gleich rum, nur weil du zu blöd bist, den Spy richtig zu benutzen!



  • Oha, Da war ja jemand auf meiner Page. 😉



  • ein blödmann, der lesen kann - sehr verdächtig!



  • Wenn du dich mit mir wortprügeln willst, dann können wir das gerne im Offtopic-Forum tun. 🕶



  • lange Diskussion, aber rausgekommen ist nichts.
    Hat nun jemand eine Idee, wie man z.B. einen Button beim Mouseover effektiv
    verändern kann ?



  • Das sollte doch eigentlich schon mit TrackMouseEvent funktionieren 😕 Hast du das mal ausprobiert?



  • Original erstellt von -King-:
    [quote]Aber irgendwie kommen nur die Nachrichten an, wenn man das Static mit dem Style SS_NOTIFY erstellt.

    **Das ist nun wieder ganz was anderes. SS_NOTIFY bewirkt, daß das static bestimmte Nachrichten an das Parent sendet. WM_MOUSEMOVE wird von Windows versendet und kommt auch beim static an (wie bei jedem Fenster eben).

    Verstehe garnicht wie die das geschafft haben zu verhindern, dass die ganzen Notifications gesendet werden. Gibt's da ne Option beim Registrieren der Klasse oder wie hat Microsoft das gemacht?

    Von welchen Notifications sprichts Du?**[/QUOTE]

    Die WM_MOUSEMOVE Message kommen nicht an, wenn SS_NOTIFY nicht gesetzt ist und ich glaube es liegt daran das das Static-Steuerelement mit HTTRANSPARENT auf die Nachricht WM_NCHITTEST antwortet.



  • ...und wenn es mit SS_NOTIFY erstellt wurde dann eben HTCLIENT, so dass die WM_MOUSEMOVE Messages wieder ankommen.



  • @-King-: Kamen bei dir die WM_MOUSEMOVE Nachrichten wirklich ohne SS_NOTIFY an? 😮 😮 Also irgendwie kann ich das jetzt nicht mehr glauben. Hatte es auch nochmal mit Spy++ abgecheckt:

    Wenn ich mich mit der Maus über dem Static bewege kommen nur WM_NCHITTEST Nachrichten im Spy-Fenster worauf dann wie gesagt HTTRANSPARENT returnt wird.

    Und bei WebFritzi war es ja genauso.


Anmelden zum Antworten