Cursor auf MFC Icon ändern



  • Hallo hat jemand eine Idee wie ich den Cusor änder wenn sich die Maus links oben auf dem Icon befindet?

    Ich weiß nämlich nicht wo und wie ich SetCursor setzten muss, damit er das an der Stelle ändert?



  • Hat denn keiner eine Idee?


  • Mod

    Diesen Cursor behandelt das System. WM_NCHITTEST liefert hier IMHO HTSYSMENU. Das Icon wird entsprechend dann durch die DefWindowProc gesetzt.
    Evtl. kannst Du mal den Spy++ verwenden um zu sehen wie hier die Windows-Nachrichten fliessen.



  • Das nützt irgendwie auch nichts.
    Habe mir das jetzt anders überlegt. Will jetzt die obere Ecke meines Fenster´s bestimmen und dann einfach bei MouseMove mit point arbeiten. Aber jetzt scheitert es die Position des Fensters zu bestimmen... 😕 😕 😕 😕



  • Erstens: OnMouseMove() bekommt die aktuellen Maus-Koordinaten übergeben - relativ zur linken oberen Ecke des Fensters (d.h. das Icon liegt etwa im Bereich (0,0) bis (16,16)*).

    Zweitens: Mit GetWindowRect() bekommst du die exakte Position deines Fensters.

    * die genaue Größe bekommst du mit GetSystemMetrics() heraus.


  • Mod

    Healthy schrieb:

    Das nützt irgendwie auch nichts.
    Habe mir das jetzt anders überlegt. Will jetzt die obere Ecke meines Fenster´s bestimmen und dann einfach bei MouseMove mit point arbeiten. Aber jetzt scheitert es die Position des Fensters zu bestimmen... 😕 😕 😕 😕

    Das geht nicht!
    1. Ist das ein Non-Client Bereich. Du bekommst also für diesen Bereich des Icons in der Titelleiste keine WM_MOUSEMOVE Nachricht. Das geht nur über WM_NC-Nachrichten.
    2. Muss man letzten Endes auf WM_SETCURSOR reagieren, jede andere Stelle ist falsch und führt nicht zum gewünscten Ergebnis.


Log in to reply