在 MFC 中實現鼠標拖拽繪製折線,核心在於正確處理 WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUP 三條消息的協作流程。許多初學者「畫不對」,通常是因為座標系統混淆(螢幕座標 vs 客戶區座標)、繪圖上下文(DC)獲取釋放不當、或是未在移動時即時刷新導致殘影。
OnLButtonDown 中捕獲鼠標(SetCapture),記錄起始點,將其加入點陣列,標記「正在繪製」。OnMouseMove 中若正在繪製,先用橡皮筋模式(CDC::SetROP2(R2_NOTXORPEN))擦除上一條臨時線,再畫新臨時線至當前點,更新臨時終點。OnLButtonUp 中釋放鼠標捕獲(ReleaseCapture),將終點加入點陣列,標記結束,觸發 Invalidate 重繪。OnPaint 中遍歷點陣列,用 Polyline 一次性繪製所有確認線段。CClientDC 進行即時反饋繪圖,CPaintDC 用於 OnPaint 重繪。CArray<CPoint> 或 std::vector<CPoint> 存儲。微軟官方範例 Scribble 完整演示了此流程,可下載源碼參考。