Clickevents im Trayicon / Doppelklick löst auch 2 Linksklick aus ?!?!



  • Hallo,

    ich bit totaler Anfänger in C++.
    Ich habe mir letzte Woche das DEV C++ runtergeladen. War neugieig und wollte mir C++ mal anschauen.
    Jetzt habe ich mir ein kleines Programm geschrieben.
    Ein einfaches Fenster mit einem Menü über das ich verschiedene Anwendungen starten kann. Das funktioniert auch super. Jetzt will ich das Programm aber über ein ICON im Systemtray steuern. Also habe ich ein Trayicon erstellt und starte das Programm unsichtbar. Soweit sogut.
    Ich will jetzt 3 Funtionen ausführen.
    1. Linksklick öffnet Hauptmenü ( im Moment öffnet es eine Messagebox zum Test)
    Das Klappt!
    2. Rechtsklick öffnet ein zeites Menü ( im Moment öffnet es eine andere Messagebox zum Test)
    Das Klappt!
    3. Doppelklick öffnet oder schliesst Hauptfenster je nach aktuellem Zustand
    Das Klappt auch ABER , wenn ich einen Doppelklick ausführe werden auch 2 Messageboxen des Linksklicks geöffnet, einevor und eine nach dem Hauptfenster.
    Bei ernuten Doppelklick schlisst sich das Hauptfenster wie gewünscht und es werden 2 weitere Linksklick-Messageboxen geöffnet.
    Wie kann ich das verhindern ??? wiso sendet der Callback ein WM_LBUTTOUP wenn ich einen Doppelklick mache? Ich raffs nicht!!
    Ich hoffe mir kann jemand helfen.

    Hier noch mein Code für die Messageauswertung:

    switch(lParam)
    {

    case WM_LBUTTONDBLCLK:

    if (fenster==0){
    ShowWindow (hwnd, SW_SHOWNORMAL);
    SetForegroundWindow(hwnd);
    fenster = 1 ;

    }

    else if (fenster==1){

    ShowWindow (hwnd, SW_HIDE);
    fenster = 0 ;
    }

    break;

    case WM_RBUTTONUP:

    MessageBox (NULL, "RECHTSKLICK" , "Rechts", 0);
    break;

    case WM_LBUTTONUP:

    MessageBox (NULL, "LINKSKLICK" , "Links", 0);
    break;
    }

    Danke im Voraus flon



  • "...ein WM_LBUTTOUP wenn ich einen Doppelklick mache..."

    Es ist spät und ich bin müde, aber versuchen wir's:

    WM_LBUTTONUP wird wohl dann sein, wenn die linke Maustaste wieder losgelassen wird, und das passiert bei einem Doppelklick nun 2x.

    MfG



  • erstmal Danke für die schnelle Antwort.
    Das Das ein Doppelklick 2 mal WM_LBUTTONUP enthält ist mir klar.
    Aber da ich im Fenster per Style CS_DBLCLK definiert habe ging ich davon aus Das Windows Doppelklicks abfängt.
    Also ich Klicke Windows wartet ob in der vom System vorgegebenen Zeit ein Weiterer Klick erfolgt.
    Wenn Ja wird statt 2 mal WM_LBUTONUP ebend WM_LBUTTONDBLCLK zurückgegeben.
    Aber es gibt 2 mal WM_LBUTONUP und WM_LBUTTONDBLCLK zurück.
    Das passiert im übrigen auch, wenn ich das Scrollrad drücke.
    Da ist der Doppelklick drauf, aber dabei wird defacto die linke Taste garnicht gedrückt. Die erkennung als doppelklick erfolgt durch Windows.
    Meine Frage ist jetzt:
    Wie kann ich dafür sorgen, dass entweder bei einem Doppelklick nur WM_LBUTTONDBLCLK zurückgegeben wird. Oder wie kann ich den Callback lParam so auswerten, dass wenn er WM_LBUTTONDBLCLK enthält NUR diese Funktion ausgewählt wird.
    Ich habe schon versucht lParam in eine Variable zu speichern und die dann auszuwerten, aber ich bekomme iParam nicht in die Variable (egal welcher Typ).
    Vieleicht kann mir auch jemand sagen was genau bei einem Doppelklick im LOWORD von lParam zurückgegeben wird.

    Danke !!!

    flon



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Log in to reply