使用滑鼠繪製

您可以讓使用者在處理 WM_MOUSEMOVE 訊息時,使用滑鼠繪製視窗程式來繪製線條。 每當使用者移動視窗內的游標時,系統會將 WM_MOUSEMOVE 訊息傳送至視窗程式。 若要繪製線條,視窗程式可以擷取顯示裝置內容,並在目前和先前游標位置之間的視窗中繪製線條。

在下列範例中,當使用者按下並按住滑鼠左鍵時,視窗程式會準備繪製, (傳送 WM_LBUTTONDOWN 訊息) 。 當使用者移動視窗內的游標時,視窗程式會收到一系列的 WM_MOUSEMOVE 訊息。 針對每個訊息,視窗程式會繪製連接上一個位置和目前位置的線條。 若要繪製線條,程式會使用 GetDC 來擷取顯示裝置內容;然後,在繪圖完成且從訊息傳回之前,程式會使用 ReleaseDC 函式釋放顯示裝置內容。 當使用者放開滑鼠按鍵時,視窗程式就會清除旗標,而繪圖會停止 (傳送 WM_LBUTTONUP 訊息) 。

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; 

啟用繪圖的應用程式,如本範例所示,通常會記錄點或線條,以便在每當視窗更新時重新繪製線條。 繪圖應用程式通常會使用記憶體裝置內容和相關聯的點陣圖來儲存使用滑鼠繪製的線條。