onmouseover bei einem static
-
Ich habe so das ungute Gefühl, wir befinden und in einem Mysterium.
-
Ja, das habe ich auch. Aber irgendwie muß es doch funktionieren! Andere können das ja auch ;-).
-
Was denn? Du hast doch jetzt sogar 2 Möglichkeiten. Entweder du nimmst meine Methode oder die Subclassing-Methode mit DefWindowProc() als Rückgabewert.
-
... das teste ich nochmal!
[ Dieser Beitrag wurde am 29.08.2002 um 16:19 Uhr von CQ editiert. ]
-
... oki, das funktioniert erstmal. Ein kleines Problem bleibt aber noch. Dieses
::GetClientRect(GetDlgItem(hw, IDC_STATIC_VERGESSEN), &rect);
liefert ja leider nicht die richtigen Koordinaten vom Static-Element. Top und Left sind immer 0! Somit stimmt also die Positionsbestimmung nicht und ich erhalte halt das Event zur falschen Zeit bzw. Mausbewegung.
-
Mit der SetWindowLongPtr-Variante kann man allerdings WM_NCHITTEST abfangen
-
@geeky
Jaja, hast ja Recht.@CQ
Das einfachste ist IMHO, die RECT-Struktur direkt nach CreateWindow() des Statics zu füllen.
-
Was hatte -King- denn im Beitrag nach mir geschrieben? Hab's nicht schnell genug mitbekommen :p
-
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.
-
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!