首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 實現鼠標自由繪製折線:消息傳遞與座標處理全解析

     編輯:程式設計綜合問答

在 MFC 中實現鼠標拖拽繪製折線,核心在於正確處理 WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUP 三條消息的協作流程。許多初學者「畫不對」,通常是因為座標系統混淆(螢幕座標 vs 客戶區座標)、繪圖上下文(DC)獲取釋放不當、或是未在移動時即時刷新導致殘影。

標準實現邏輯

  1. 按下:在 OnLButtonDown 中捕獲鼠標(SetCapture),記錄起始點,將其加入點陣列,標記「正在繪製」。
  2. 移動:在 OnMouseMove 中若正在繪製,先用橡皮筋模式(CDC::SetROP2(R2_NOTXORPEN))擦除上一條臨時線,再畫新臨時線至當前點,更新臨時終點。
  3. 釋放:在 OnLButtonUp 中釋放鼠標捕獲(ReleaseCapture),將終點加入點陣列,標記結束,觸發 Invalidate 重繪。
  4. 重繪:在 OnPaint 中遍歷點陣列,用 Polyline 一次性繪製所有確認線段。

關鍵細節

  • 使用 CClientDC 進行即時反饋繪圖,CPaintDC 用於 OnPaint 重繪。
  • 所有滑鼠座標均為客戶區座標,無需轉換。
  • 點陣列建議用 CArray<CPoint> 或 std::vector<CPoint> 存儲。

微軟官方範例 Scribble 完整演示了此流程,可下載源碼參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved