tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
1139
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von SunnyBunny
    SunnyBunny SunnyBunny ist offline Mitglied Silber
    Registriert seit
    May 2006
    Beiträge
    78
    Wenn ich bei mir MFC, VS6.0, C++, eine ListCtrl habe und beide Funktionen Einzelklick und Doppelklick benutzen will, dann springt mir das Programm beim Doppelklick zuerst in den Einzelklick.

    Wie kann ich dies verhindern, so dass entsprechend nur in die jeweilige Funktion gesprungen wird.

    Vielen Dank für eure Hilfe im Voraus.

    Gruß Sunny
    Geändert von SunnyBunny (18.02.08 um 13:16 Uhr) Grund: Tippfehler
     
    Spinat schmeckt am besten, wenn man ihn kurz vor dem Servieren durch ein Schnitzel ersetzt und ein leckeres Hefeweizen dazu trinkt.

    Code :
    1
    2
    3
    4
    5
    
    if(Beitrag == "gut" || Beitrag == "lustig" || Beitrag == "hilfreich")
    {
         //Bewerte(CString User, Beitrag* Beitrag, BOOL Positiv) 
         Bewerte([COLOR="Magenta"]"SunnyBunny"[/COLOR],&Beitrag_siehe_oben,[COLOR="Blue"]true[/COLOR]);
    }

  2. #2
    langer1801 langer1801 ist offline Mitglied Platin
    Registriert seit
    Jun 2005
    Ort
    Bad Arolsen (Hessen)
    Beiträge
    556
    Hi,

    das läuft darauf hinaus, die Auswertung zu verzögern, bis die DoubleClick-Zeit abgelaufen ist. Also in der Behandlungsroutine für den Einzelklick einen Timer starten mit etwas mehr als die DoubleClick-Zeit. Dann gibt es zwei Möglichkeiten.
    Erstens: Der zweite Klick erfolgt, bevor der Timer abgelaufen ist. Dann wird die DoubleClick-Routine angesprungen. Hier bitte mit KillTimer den Timer ausschalten, dass er nicht auch auslöst und dann die weitere Behandlung starten.
    Zweitens: Der Timer löst aus, bevor ein zweiter Klick kommt. Dann hier (in OnTimer) die Funktion für den Einzelklick implementieren. KillTimer nicht vergessen.

    Mfg

    langer
     

  3. #3
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Zitat Zitat von SunnyBunny Beitrag anzeigen
    Wenn ich bei mir MFC, VS6.0, C++, eine ListCtrl habe und beide Funktionen Einzelklick und Doppelklick benutzen will, dann springt mir das Programm beim Doppelklick zuerst in den Einzelklick.
    Wundert mich jetzt, die Windows-API sollte die entsprechenden Notifications eigentlich sauber trennen können. Verwendest du die NM_CLICK (einfach) und NM_DBLCLICK (doppelt) Notifications?

    Gruß MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  4. #4
    Avatar von SunnyBunny
    SunnyBunny SunnyBunny ist offline Mitglied Silber
    Registriert seit
    May 2006
    Beiträge
    78
    Jawoll ja.
    NM_CLICK (einfach) und NM_DBLCLICK (doppelt) Notifications werden benutzt.
    Er springt immer in die Einzelklick - Funktion, da der erste Teil des Doppelklciks ja ein Einfachklick ist. Finde das grausam von Microsoft, dass die das nicht auseinanderhalten.
    Versuche mich gerade am Timer.
     
    Spinat schmeckt am besten, wenn man ihn kurz vor dem Servieren durch ein Schnitzel ersetzt und ein leckeres Hefeweizen dazu trinkt.

    Code :
    1
    2
    3
    4
    5
    
    if(Beitrag == "gut" || Beitrag == "lustig" || Beitrag == "hilfreich")
    {
         //Bewerte(CString User, Beitrag* Beitrag, BOOL Positiv) 
         Bewerte([COLOR="Magenta"]"SunnyBunny"[/COLOR],&Beitrag_siehe_oben,[COLOR="Blue"]true[/COLOR]);
    }

  5. #5
    Avatar von SunnyBunny
    SunnyBunny SunnyBunny ist offline Mitglied Silber
    Registriert seit
    May 2006
    Beiträge
    78
    Bekomme das mit dem Timer nicht ganz hin, da ich nicht weiss wie ich den Aufruf des Einzelklicks machen soll:

    Code :
    1
    
    OnClickListListe1(NMHDR* pNMHDR, LRESULT* pResult)

    Woher bekomme ich die beiden Objekte?
     
    Spinat schmeckt am besten, wenn man ihn kurz vor dem Servieren durch ein Schnitzel ersetzt und ein leckeres Hefeweizen dazu trinkt.

    Code :
    1
    2
    3
    4
    5
    
    if(Beitrag == "gut" || Beitrag == "lustig" || Beitrag == "hilfreich")
    {
         //Bewerte(CString User, Beitrag* Beitrag, BOOL Positiv) 
         Bewerte([COLOR="Magenta"]"SunnyBunny"[/COLOR],&Beitrag_siehe_oben,[COLOR="Blue"]true[/COLOR]);
    }

  6. #6
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Die Timergeschichte könntest du so lösen:
    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        const UINT nIDEvent = 1;
     
        m_bDblClick = FALSE; // Membervariable im Dialog
        SetTimer(nIDEvent, GetDoubleClickTime() + 10, NULL);
     
        *pResult = 0;
    }
     
    void CMyDlg::OnDblclkList(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        m_bDblClick = TRUE;
        
        // TODO: Doppelklick verarbeiten
     
        *pResult = 0;
    }
     
    void CMyDlg::OnTimer(UINT nIDEvent) // Mit Klassenassistenten erzeugen (WM_TIMER)
    {
        if( nIDEvent == 1 )
        {
            KillTimer(nIDEvent);
     
            if( !m_bDblClick )
            {
                // TODO: Einfachklick verarbeiten
            }
        }
     
        CDialog::OnTimer(nIDEvent);
    }
    Gruß
    MCoder
     
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  7. #7
    Avatar von SunnyBunny
    SunnyBunny SunnyBunny ist offline Mitglied Silber
    Registriert seit
    May 2006
    Beiträge
    78
    Super DANKE!

    Es funktioniert.

    (Und ich wollte mit Callbackfunktion und Pretranslatemessage und Klicksimulation das machen, aber so ist das natürlich viel einfacher!).

    /Closed
     
    Spinat schmeckt am besten, wenn man ihn kurz vor dem Servieren durch ein Schnitzel ersetzt und ein leckeres Hefeweizen dazu trinkt.

    Code :
    1
    2
    3
    4
    5
    
    if(Beitrag == "gut" || Beitrag == "lustig" || Beitrag == "hilfreich")
    {
         //Bewerte(CString User, Beitrag* Beitrag, BOOL Positiv) 
         Bewerte([COLOR="Magenta"]"SunnyBunny"[/COLOR],&Beitrag_siehe_oben,[COLOR="Blue"]true[/COLOR]);
    }

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 26.07.09, 18:53
  2. Antworten: 2
    Letzter Beitrag: 06.09.07, 15:18
  3. Mensch löst sich auf
    Von chris_94 im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 1
    Letzter Beitrag: 15.07.07, 20:58
  4. bein löst sich
    Von blubbbla im Forum 3D Studio Max
    Antworten: 0
    Letzter Beitrag: 14.08.06, 19:53
  5. Klickereignis löst vermehrung aus...!
    Von Mailyn im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 21.05.05, 17:09