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

Windows 無標題列視窗客戶區拖曳技術完整實作指南

     編輯:VC 教學

應用場景

IME 輸入法、浮動工具箱、Office 桌面工具列等「無標題列、常駐頂層」高級視窗,必須自行實作客戶區拖曳移動。

系統預設 vs 自行實作

  • 普通視窗:系統自動處理標題列拖曳、邊框縮放。
  • 無標題視窗:無系統支援,需自行處理 WM_LBUTTONDOWN、WM_MOUSEMOVE、WM_LBUTTONUP 等訊息,完成命中測試、拖曳開始、虛線框繪製/移動/結束等全流程。

客戶區命令區域劃分

  1. 特定命令區:用 RECT 定義的子矩形(如標題列區域),僅在此區域響應拖曳。
  2. 非特定命令區:其餘區域,視需求決定是否處理。

核心實作步驟

  1. WM_LBUTTONDOWN:GetCursorPos 取得螢幕座標,ScreenToClient 轉客戶區座標,判斷是否落在特定命令區。是則 SetCapture、記錄起始座標、進入拖曳狀態。
  2. WM_MOUSEMOVE:若處於拖曳狀態,計算位移 dx, dy,呼叫 SetWindowPos 移動視窗,或繪製/更新虛線框(DrawFocusRect)。
  3. WM_LBUTTONUP:ReleaseCapture,結束拖曳,若用虛線框則最終 SetWindowPos 定位。

滑鼠游標動態提示

在 WM_SETCURSOR 或 WM_MOUSEMOVE 中,依滑鼠是否在特定命令區,切換為 IDC_SIZEALL(四向箭頭)或預設箭頭,直觀提示可拖曳。

此法避免模擬 WM_NCLBUTTONDOWN 等非穩定手法,兼容性佳,可完全掌控拖曳行為。

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