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
-
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. }
-
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.
-
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. }