傳統做法分散在 MouseDown/MouseMove/MouseUp 三事件,需全域變數、橡皮筋繪製邏輯複雜。改良為在 MouseDown 中呼叫單一處理函數,內部循環處理所有滑鼠訊息:
WaitMessage 等待訊息。PeekMessage 取得訊息。ControlPaint.DrawReversibleFrame 繪製橡皮筋矩形。GetMessage 移除訊息,進入下輪迴圈。優點:邏輯集中、無全域變數、可複用、不處理重繪等無關訊息。
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 取得輸入字元 (含輸入法合成字串)。