IME 輸入法、浮動工具箱、Office 桌面工具列等「無標題列、常駐頂層」高級視窗,必須自行實作客戶區拖曳移動。
WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUP 等訊息,完成命中測試、拖曳開始、虛線框繪製/移動/結束等全流程。RECT 定義的子矩形(如標題列區域),僅在此區域響應拖曳。WM_LBUTTONDOWN:GetCursorPos 取得螢幕座標,ScreenToClient 轉客戶區座標,判斷是否落在特定命令區。是則 SetCapture、記錄起始座標、進入拖曳狀態。WM_MOUSEMOVE:若處於拖曳狀態,計算位移 dx, dy,呼叫 SetWindowPos 移動視窗,或繪製/更新虛線框(DrawFocusRect)。WM_LBUTTONUP:ReleaseCapture,結束拖曳,若用虛線框則最終 SetWindowPos 定位。在 WM_SETCURSOR 或 WM_MOUSEMOVE 中,依滑鼠是否在特定命令區,切換為 IDC_SIZEALL(四向箭頭)或預設箭頭,直觀提示可拖曳。
此法避免模擬 WM_NCLBUTTONDOWN 等非穩定手法,兼容性佳,可完全掌控拖曳行為。