首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

如何用 C# 編寫文字編輯器 (九) 滑鼠拖曳調整大小與游標控制

     編輯:關於C語言

滑鼠拖曳調整物件大小:改良模式

傳統做法分散在 MouseDown/MouseMove/MouseUp 三事件,需全域變數、橡皮筋繪製邏輯複雜。改良為在 MouseDown 中呼叫單一處理函數,內部循環處理所有滑鼠訊息:

  1. 記錄拖曳起始座標。
  2. 進入迴圈,WaitMessage 等待訊息。
  3. PeekMessage 取得訊息。
  4. 滑鼠釋放訊息 → 退出迴圈。
  5. 滑鼠移動訊息 → 計算位移,呼叫 ControlPaint.DrawReversibleFrame 繪製橡皮筋矩形。
  6. GetMessage 移除訊息,進入下輪迴圈。
  7. 迴圈結束回傳總位移,呼叫端據此調整物件大小。

優點:邏輯集中、無全域變數、可複用、不處理重繪等無關訊息。

.NET 與 Win32 API 互操作

  • Control.Handle:視窗句柄,可傳給 Win32 API。
  • CreateParams:對應 CreateWindowEx 參數,覆寫可設建立樣式。
  • WndProc:訊息處理總入口,可覆寫處理底層訊息。
  • Application.AddMessageFilter/RemoveMessageFilter:應用程式級訊息鉤子。
  • DllImport:導入 DLL API 函數。

游標控制

游標為編輯器取得焦點時在插入點閃爍的方塊。Win32 API:CreateCaret、SetCaretPos、ShowCaret、HideCaret。OS 自動處理閃爍。

  • 根據插入點計算游標在檢視區座標,依插入/覆寫模式決定寬高。
  • 若游標不在可視區,捲動編輯器確保可見。
  • 重載 OnGotFocus/OnLostFocus 顯示/隱藏游標,末尾必呼叫 base 方法,否則嵌入網頁會失焦。

輸入法控制

中文輸入法浮動視窗預設螢幕置中,不隨插入點移動。用 ImmSetCompositionWindow 設定浮動視窗位置隨插入點移動,大幅改善輸入體驗。在 OnKeyPress 取得輸入字元 (含輸入法合成字串)。

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