Abfangen, wenn die Maus in gedrücktem Zustand den Button verlässt...



  • Hallo ihr,

    ich habe da eine Frage, mit der ich nicht so recht weiterkomme und
    bräuchte ein wenig Hilfe...

    Ich möchte gerne in Erfahrung bringen´und eine Aktion ausführen
    lassen, solange auf einem PDA ein bestimmter Button nicht mehr
    gedrückt wird (das klappt auch schon), oder wenn der Eingabestift
    (die Maus) die Fläche des Buttons verlässt. (Hier haperts noch...)

    Durch die.rc-Datei weiss ich, wo meine Buttons liegen:
    CONTROL "",IDC_BT_LEFT,"Button",BS_OWNERDRAW | BS_NOTIFY | WS_TABSTOP,54,151,45,20
    CONTROL "",IDC_BT_RIGHT,"Button",BS_OWNERDRAW | BS_NOTIFY | WS_TABSTOP,108,151,45,20

    _____________________________________________________________________________

    Das verziehen der Maus fange ich über das Ereignis OnMouseMove ab.
    .
    .
    .
    ....::OnMouseMove(UINT nFlags, CPoint point)
    {
    BOOL x_fault = FALSE;
    BOOL y_fault = FALSE;

    if (point.x < 54) {x_fault = TRUE;}
    else if ((point.x >= 54) && (point.x <= 99)) {x_fault = FALSE;}
    else if ((point.x > 99) && (point.x < 108)) {x_fault = TRUE;}
    else if ((point.x >= 108) && (point.x <= 153)) {x_fault = FALSE;}
    else if (point.x > 153) {x_fault = TRUE;}

    if (point.y < 151) {y_fault = TRUE;}
    else if ((point.y >= 151) && (point.y <= 171)) {y_fault = FALSE;}
    else if (point.y > 171) {y_fault = TRUE;}

    if (x_fault || y_fault)
    {

    ((Hier kommt dann der Teil, der gemacht werden soll, der
    funktionier auch schon))

    }
    }

    _____________________________________________________________________________

    Aber irgendwie will das noch nicht so recht klappen.
    Dachte mir über das Setzen der beiden BOOL-Variablen und nachherige Abfragen
    könnte ich genau sehen, wann die Maus den spezifizierten Bereich verlässt.
    Aber leider wird die Aktion auch schon ausgeführt, wenn die Maus no auf dem
    Button verzogen wird.

    Irgendwie komme ich leider nicht auf die Lösung.

    Vielen Dank schon einmal und schöne Grüße



  • Probier mal den Dreisatz:

    GetWindowRect, ClientToScreen, PtInRectangle

    hth


  • Mod

    Dieser Test ist doch quatschl. Du bekommst doch die Koordinaten der Mausbewegung in Client Koordinaten!



  • Es gibt doch WM_MOUSELEAFE 😉
    Stichwort: TrackMouseEvent.



  • Hallo Siggi,

    habe nun mal mit den genannten Funktionen herumexperimentiert,
    klang schon sehr vielversprechend, aber auch das verschafft mir
    leider nicht mein gewünschtes Resultat.

    Hallo Martin,

    auch deine Denkanstösse habe ich mal versucht, in die Tat umzusetzen.
    Habe dann versucht, zu sehen was passiert, wenn ich mit Coordinaten
    in der Client-Area arbeite und dann auch das ganze mit den Ideen von
    Sigi kombiniert, aber leider auch negativ.

    Hat einer von Euch, oder sonst noch jemand, der zufällig über diesen
    Post stolpert, einen konkreten Vorschlag, wie ich es schaffen kann,
    zu erkennen, wann auf einem PDA der Eingabestift von der Fläche eines
    Button rutscht? Also solange der Stift auf den Button drückt, soll was
    getan werden, rutscht der Stift runter, dann nicht mehr. Wenn man den
    Stift auf dem Button wieder hochnimmt, klappt schon alles super.

    Danke schonmal für die bisherigen und alle kommenden Antworten.

    Schöne Grüße von Allen


Anmelden zum Antworten