程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> WINDOWS窗口的客戶區域拖動技術及其應用

WINDOWS窗口的客戶區域拖動技術及其應用

編輯:vc教程

WINDOWS應用程序窗口一般包括兩種:普通窗口和常居頂層的無標題條高級窗口。前者是由WINDOWS內部功能定制的,它具有WINDOWS應用程序窗口的所有普通特性:具有標題條、窗口邊框、最大化按鈕、最小化按鈕和系統默認的快捷鍵及鼠標支持功能等,利用鼠標左鍵拖動該種窗口的標題條可以在屏幕上任意移動窗口,當鼠標光標停在窗口邊框上時可以改變窗口大小;後者是一種定制的高級窗口,它不具有普通窗口的任何屬性,整個窗口的控制必須由編程者來一一確定,使用這種窗口的典型實例有WINDOWS中的IME輸入法應用程序、UCWIN4.0平台、各種浮動工具箱、OFFICE中的桌面工具欄和第三方開發的漢字輸入平台等。

WINDOWS 這種無標題條常居頂層高級窗口的一個顯著特點是,不需改變窗口大小但必須具有窗口的客戶區域拖動功能。由於普通窗口的拖動功能是由系統來完成的,編制普通的應用程序根據無須考慮客戶區域拖動問題,因此一般編程人員很難遇到這個問題,更談不上如何實現這一功能了。開發者往往希望自己開發出來的軟件具有經典軟件中的窗口客戶區域拖動功能,筆者曾經利用模仿系統鼠標點擊標題條拖動窗口和WINDOWS內部提供的API發送函數發送內部拖動命令來實現無標題常居頂層高級窗口的客戶拖動功能,結果都不理想。後來只好在窗口函數中通過直接處理WM_LBUTTONDOWN、WM_MOUSEMOVE和WM_LBUTTONUP消息,自行控制窗口拖動的客戶命令區、拖動開始、窗口移動、拖動虛框繪制、虛框移動和拖動結束等過程,來實現高級頂層窗口的客戶區域拖動方案。下面就自己實踐經驗詳細介紹實現該方案的具體方法和主要技巧。

一、WINDOWS檢測客戶拖動命令及鼠標光標動態提示的實現方法

WINDOWS 無標題條常居頂層高級窗口的客戶區域一般分為兩種:特定客戶命令區域和非特定客戶命令區域。特定客戶命令區域是指利用"RECT"定義的特定子矩形區域,窗口函數對發生在該區域內的鼠標命令進行檢測並處理;非特定客戶命令區域是指沒有明確定義的窗口客戶區域部分,即所有特定客戶命令區域之外的部分,窗口函數根據實際需要來確定是否對該區域內發生的鼠標命令進行處理。實現常居頂層高級窗口拖動功能的首要問題,是如何檢測和處理特定客戶命令區域和非特定客戶命令區域內的鼠標命令,以及如何利用鼠標光標來動態提示用戶此時可以進行窗口的拖動操作。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved