ON_BN_DOUBLECLICKED



  • ich hab mal wieder einige Probs da Infos zu finden.
    Also ich weiss für was das Teil ist deshalb will ich es ja verwenden. 😃
    Ich möchte aber beide Abfragen also ON_BN_DOUBLECLICKED und ON_BN_CLICKED.
    Mein Problehm dabei ist wie warscheinlich hier wer weiss das ON_BN_CLICKED auch immer ausgelöst wird wenn man ON_BN_DOUBLECLICKED auslöst.
    hat da jemand ne idee zu wie ich das filtern kann 😕
    ich möchte nämlich einem Button doppelfunkion geben, also unterschiedliche Programmabläufe jenachdem ob normal oder doppelt geklickt.
    Am liebsten wer mir ja ne unterscheidung zwischen links und rechtsklick auf einen Button aber dazu haben ich wehniger gefunden und wenn ich mir die Deklaration so anschaue von CButton scheints die möglichkeit auch nicht zu geben.


  • Mod

    fmotto schrieb:

    ich hab mal wieder einige Probs da Infos zu finden.
    Also ich weiss für was das Teil ist deshalb will ich es ja verwenden. 😃
    Ich möchte aber beide Abfragen also ON_BN_DOUBLECLICKED und ON_BN_CLICKED.
    Mein Problehm dabei ist wie warscheinlich hier wer weiss das ON_BN_CLICKED auch immer ausgelöst wird wenn man ON_BN_DOUBLECLICKED auslöst.
    hat da jemand ne idee zu wie ich das filtern kann 😕

    Das kannst Du nicht filtern.
    Du kannst es folgended lösen:
    1. Wenn der normale Click kommt setzt Du einen Timer auf, mit der Doppelklickzeit (sollte sich aus den Systemeinstellungen ermitteln lassen), oder nimmst selbst einen Wert an.
    2. Wenn der Doppelklick kommt, dann killst Du den Timer.
    3. Wenn der Timer kommt, dann wurde nur einmal geklickt!

    fmotto schrieb:

    ich möchte nämlich einem Button doppelfunkion geben, also unterschiedliche Programmabläufe jenachdem ob normal oder doppelt geklickt.
    Am liebsten wer mir ja ne unterscheidung zwischen links und rechtsklick auf einen Button aber dazu haben ich wehniger gefunden und wenn ich mir die Deklaration so anschaue von CButton scheints die möglichkeit auch nicht zu geben.

    Schreibe eine eigene Button-Klasses, die Du von CButton ableitest und die auch WM_RBUTTONDOWN annimmt. Mit den entsprechenden SetButtonState Funktionen kannst Du die entsprechenden optischen Funktionen auslösen.
    Und vergiss SetCapture nicht :-)!

    BTW: Ich halte von sochen UI-Änderungen nichts. Es gibt bessere Lösungen wie z.B. Button-Menüs etc.



  • Danke wie immer sehr hilfrecih deine Antwort. man an sowas wien timer hab ich nich mal gedacht obwohl ich die eh schon benutze.
    Ich glaube das Benutze ich erst mal, und wenns mich nervt wage ich mich an eine andere Lösung *g*



  • Also du kannst auch einfach eine Behandlungsroutine für die Nachricht WM_LBUTTONDOWN einrichten.
    In dieser Routine kannst du eine Variable einrichten die mit jedem klick auf den Button um einen erhöht wird. Am besten du schreibst noch eine Funktion.
    Mithilfe der Funktion Sleep() kannst du jetzt den PC einige sekunden warten lassen (ich würde 2 sek empfehlen).
    Am besten du fragst jetzt in einer Switch - Funktion ab wie oft auf den Button gecklickt wurde.
    Für einmaliges klicken implementierst du unter case 1: deinen Code für WM_LBUTTONDOWN,
    für doppelcklick implementierst du unter case 2: deinen Code für WM_DOUBLECLICKED

    ...das ganze hat noch einen Vorteil: du kannst auch auf drie,- vier oder fünfmaliges Klicken Antworten!

    int zaehler = 0;
    
    (..)
    
    int Cfunc(int zahl)
    {
    switch(zahl)
    {
    case 1: //Code für WM_LBUTTONDOWN
    break;
    case 2: // Code für WM_DOUBLECLICKED
    break;
    (..)
    }
    return 0;
    }
    
    void Klickfunktion()
    {
    zaehler++; 
    Sleep(2);
    Cfunc(zaehler);
    }
    


  • Coole Idee, muss man erst mal drauf kommen 🕶
    Das sorgt dafür das ich aus 3 Funktionsblöcken 1 machen kann.
    den hab ich mir sogleich mal in meinen merker gesetzt, die einfachen ideen sind ja das eine oder andere mal genau was man braucht 😃


  • Mod

    @CFunc:
    Das bringt nichts, denn auch in diesem Fall wird jede Operation ausgeführt und nicht gewartet wieviele Klicks eingehen. Das heißt es wird immer die Operation für einen Klick+zwei Klicks+drei Klicks ausgeführt. Und vor allem es gibt keinen guten Mechanismus den Zähler zurückzusetzen.
    Und einen Sleep zu verwenden und den auch noch für 2sec zu empfehlen halte ich absolut für daneben. Das einfrieren einer Applikation für 2 Sekunden zu erlauben ist für eine GUI nicht schön!
    Just my 2 cents.


Anmelden zum Antworten