SHIFT-Flag bei OnLButtonDown(...) abfangen



  • Hallo Leute,
    ich möchte in einer View überprüfen ob der Anwender beim drücken der linken Maustaste die SHIFT, STRG oder keine Taste gedrückt hält. Beim Abfangen der WM_LBUTTONDOWN Nachricht bekomme ich ein UINT nFlags angeboten, aber wie finde ich heraus das in diesem Bitarray SHIFT oder STRG enthalten ist?

    Danke für eure Antworten


  • Administrator

    CDeinFenster::OnLButtonDown(UINT nFlags, CPoint point)
    {
        if(nFlags & MK_SHIFT)
        {
            // Die Shift-Taste ist gedrückt.
        }
        else if(nFlags & MK_CONTROL)
        {
            // Die Control-Taste ist gedrückt.
        }
    
        // usw.
    }
    

    http://msdn2.microsoft.com/en-us/library/c293as9k.aspx

    Grüssli



  • Dravere schrieb:

    ...
    

    ohne else. äääh, oder so...

    if (nFlags & (MK_SHIFT | MK_CONTROL))
        {
            // beide gedrückt
        }
        else if (nFlags & MK_SHIFT)
        {
            // nur Die Shift-Taste ist gedrückt.
        }
        else if (nFlags & MK_CONTROL)
        {
            // nur Die Control-Taste ist gedrückt.
        }
    

  • Administrator

    net schrieb:

    ohne else. äääh, oder so...

    ...
    

    Er hat nie was von beiden gleichzeitig gesagt. Daher ging ich vom dem Fall Entweder Oder aus. Und dann ist mein else schon korrekt ^^
    Vor allem verhindert man dann so auch dem User, dass er beide drücken kann.

    Grüssli



  • Dravere schrieb:

    Vor allem verhindert man dann so auch dem User, dass er beide drücken kann.

    nö, wenn er beide drückt und 'control' haben will versagt dein code, weil 'shift' vorrang hat.


  • Administrator

    Nein, dann definiert das Programm automatisch den Vorrang eben auf Shift. Wenn er Control haben will, dann soll er auf die Control-Taste drücken und nicht auf Shift. Aber ok, dann werden wir halt ein wenig benutzer freundlich:

    CDeinFenster::OnLButtonDown(UINT nFlags, CPoint point)
    {
        if(nFlags & (MK_SHIFT | MK_CONTROL))
        {
            AfxMessageBox(_T("Shift und Control wurden gedrückt. Befehl nicht zulässig. Bitte wiederholen Sie den Befehl."), MB_OK, 0);
        }
        else if(nFlags & MK_SHIFT)
        {
            // Die Shift-Taste ist gedrückt.
        }
        else if(nFlags & MK_CONTROL)
        {
            // Die Control-Taste ist gedrückt.
        }
        else if(nFlags)
        {
            AfxMessageBox(_T("Befehl unbekannt!"), MB_OK, 0);
        }
    
        // usw.
    }
    

    Besser? 😛

    Grüssli



  • Dravere schrieb:

    Besser? 😛

    ja, oder so

    switch (nFlags)
        {
            case MK_SHIFT:
            // nur Die Shift-Taste ist gedrückt.
            break;
    
            case MK_CONTROL:
            // nur Die Control-Taste ist gedrückt.
            break;
    
             default: 
            // unerlaubte kombination.
        }
    

    😉


Anmelden zum Antworten