Windows Programmierung: Markierungsrechteck aufspannen |
Soll ein Bereich mit der Maustaste markiert werden, empfielt sich eine grafische Rückmeldung für den Benutzer. Dazu spannt beispielsweise der Desktop ein Rechteck auf.
Einige Informationen merkt sich die Fensterfunktion. Zunächst steht in einer boolschen Variablen, ob die Maustaste unten ist. Diese Information steht in der Variablen dragging. Der Anfang des Aufspannens wird als Ecke des Rechtecks benötigt. Sie steht in StartPos. Schließlich wird die letzte Mausposition als die andere Ecke gebraucht (MousePos). Alle diese Variablen sind als static angelegt.
HDC hDC; static POINTS MousePos, StartPos; static bool dragging = false; . . . case WM_LBUTTONDOWN: dragging = true; SetCapture(hWnd); StartPos = MAKEPOINTS(lParam); MousePos = StartPos; break; case WM_MOUSEMOVE: if (dragging) { hDC = GetDC(hWnd); drawCapture(hDC, StartPos, MousePos); MousePos = MAKEPOINTS(lParam); drawCapture(hDC, StartPos, MousePos); ReleaseDC(hWnd, hDC); } break; case WM_LBUTTONUP: MousePos = MAKEPOINTS(lParam); ReleaseCapture(); hDC = GetDC(hWnd); drawCapture(hDC, StartPos, MousePos); ReleaseDC(hWnd, hDC); dragging = false; break; |
void drawCapture(HDC hDC, POINTS pa, POINTS pe) { SetROP2(hDC, R2_NOT); MoveToEx(hDC, pa.x, pa.y, 0); LineTo(hDC, pa.x, pe.y); LineTo(hDC, pe.x, pe.y); LineTo(hDC, pe.x, pa.y); LineTo(hDC, pa.x, pa.y); } |
Homepage - Windows-API-Programmierung | (C) Copyright 1999 Arnold Willemer |