程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> QQ窗體自動隱藏效果探究

QQ窗體自動隱藏效果探究

編輯:Delphi

騰訊QQ是當前流行的網絡聊天工具之一,由於它在應用設計上有很多獨特之處,所以也吸引了很多程序員對之進行研究和模仿。在這裡,我將利用Delphi對QQ的窗體自動隱藏效果提出自己的實現方法。

  

  

一、問題的提出

  

熟悉QQ使用的朋友都知道,當QQ窗體區域超出屏幕四邊時,窗體就會自動“消失”,只留下窗體一邊的小部分顯露在桌面上。當用鼠標移動到顯露部分之上,窗體就會在隱藏位置重新完整顯示;但當鼠標離開窗體區域後,窗體便會重新進入隱藏狀態。

  

  

對隱藏的全過程進行分析,可以得出兩點推測:第一,窗體隱藏的處理是與窗體移動過程有關;第二,窗體隱藏的觸發條件是窗體的區域已經移動到屏幕的可視范圍之外。

  

  

對第一點推測,可以通過對窗體移動時產生的Windows消息進行攔截處理加以實現。對第二點推測,如何去表示“窗體區域已經超出屏幕可視范圍”這一條件成為實現的關鍵。

  

  

二、基本的分析

  

讓我們先留意一下Windows環境下窗體移動的過程與效果。當使用鼠標移動窗體的時候,窗體本身並沒有立刻隨鼠標的移動而發生位置的改變;相反,鼠標正在拖動的是一個大小與窗體一致的透明區域(確切的說一個虛線邊框的矩形)。當鼠標釋放矩形後,窗體本身才會在矩形最後停留的地方出現,從而完成整個移動的過程。(注意:在Windows 2000及XP環境下,如果在顯示屬性中選中“拖動時顯示窗體內容”的顯示效果選項,則上述過程無法觀察。)

  

  

對QQ窗體,其移動過程與上述無異,但卻有一處不同。當我們把矩形移動到屏幕四邊且已有部分超出時,矩形就會自動地停留在超出位置上並完整顯示。此時不論我們怎樣試圖把矩形再向超出方向上移動,矩形也只保持在該位置。當釋放鼠標之後,窗體的隱藏效果也就出現了。

  

  

從上述過程可以推斷,觸發隱藏條件後,即使仍處於移動過程但矩形本身卻已經被鎖定,因此對窗體位置的判斷是發生在移動過程中,也就是說我們要攔截處理的Windows消息是WM_MOVING。其次,在移動過程中首先發生位置變化的是矩形而不是窗體本身,因此實現隱藏的關鍵是對矩形參數的判斷與設置。

  

  

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一頁  >> 

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