Dela via


Rita med musen

Du kan tillåta att användaren ritar linjer med musen genom att rita fönsterproceduren medan du bearbetar WM_MOUSEMOVE meddelandet. Systemet skickar meddelandet WM_MOUSEMOVE till fönsterproceduren när användaren flyttar markören i fönstret. Om du vill rita linjer kan fönsterproceduren hämta en visningsenhetskontext och rita en linje i fönstret mellan de aktuella och tidigare markörens positioner.

I följande exempel förbereder fönsterproceduren för ritning när användaren trycker på och håller den vänstra musknappen (skickar WM_LBUTTONDOWN meddelandet). När användaren flyttar markören i fönstret tar fönsterproceduren emot en serie WM_MOUSEMOVE meddelanden. För varje meddelande ritar fönsterproceduren en linje som ansluter den föregående positionen och den aktuella positionen. För att rita linjen använder proceduren GetDC- för att hämta en visningsenhetskontext. När ritningen är klar och innan den returneras från meddelandet använder proceduren funktionen ReleaseDC för att frigöra visningsenhetens kontext. Så fort användaren släpper musknappen rensar fönsterproceduren flaggan och ritningen stoppas (vilket skickar WM_LBUTTONUP meddelandet).

BOOL fDraw = FALSE; 
POINT ptPrevious; 
 
  . 
  . 
  . 
 
case WM_LBUTTONDOWN: 
    fDraw = TRUE; 
    ptPrevious.x = LOWORD(lParam); 
    ptPrevious.y = HIWORD(lParam); 
    return 0L; 
 
case WM_LBUTTONUP: 
    if (fDraw) 
    { 
        hdc = GetDC(hwnd); 
        MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
        LineTo(hdc, LOWORD(lParam), HIWORD(lParam)); 
        ReleaseDC(hwnd, hdc); 
    } 
    fDraw = FALSE; 
    return 0L; 
 
case WM_MOUSEMOVE: 
    if (fDraw) 
    { 
        hdc = GetDC(hwnd); 
        MoveToEx(hdc, ptPrevious.x, ptPrevious.y, NULL); 
        LineTo(hdc, ptPrevious.x = LOWORD(lParam), 
          ptPrevious.y = HIWORD(lParam)); 
        ReleaseDC(hwnd, hdc); 
    } 
    return 0L; 

Ett program som aktiverar ritning, som i det här exemplet, registrerar vanligtvis antingen punkterna eller linjerna så att linjerna kan ritas om när fönstret uppdateras. Ritningsprogram använder ofta en minnesenhetskontext och en associerad bitmapp för att lagra linjer som ritats med hjälp av en mus.