程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VB制作TopMost類型窗口

用VB制作TopMost類型窗口

編輯:VB綜合教程
TopMost這個詞也許你很陌生,但具有TopMost窗口的軟件你應該早就接觸過,如Office97、網絡吸血鬼、IE等。所謂TopMost窗口是指哪些始終出現在桌面的最前方且不會被其它窗口覆蓋的窗口,如網絡吸血鬼中的下載圖標。
  一般憎況下,在運行VB程序時,窗口總有可能會被其它程序的窗口所覆蓋。如何在自己的應用程序中實現TopMost類型的窗口呢?我們可以通過調用WindowsAPI函數SetWindowPos來實現。
  一、SetWindowPos函數介紹
  SetWindowPos函數功能是將一個窗口在三維空間中移動,利用它,你可以改變一個窗口的位置,甚至可以在Z軸上改變(Z軸決定了一個窗口和其它窗口的前後關系),你還可以改變窗口的尺寸。為了實現TopMost類型的窗口,我們只需調用該函數,將窗口放在所有窗口的前面並永遠保持在最前面即可。要想在VB中使用SetWindowPos函數,必須在程序的代碼模塊中進行如下的函數聲明:
  DeclareFunctionSetwindowPosLib"user32.dll"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsasLong)AsLong
  SetWindowPos函數各個參數的含義見表1。表1SetWindowPos函數的參數解釋

-align="middle"width="182">參數名->-align="middle"width="334">參數含義->-align="middle"width="182">hwnd->-align="middle"width="334">要移動的窗口的句柄(可以用窗體的hwnd屬性)->-align="middle"width="182">hWndInsertAfter->-align="middle"width="334">關於如何在Z軸上放置窗口的標記(具體見表2)->-align="middle"width="182">x->-align="middle"width="334">相當於窗口的Left屬性->-align="middle"width="182">y->-align="middle"width="334">相當於窗口的Top屬性->-align="middle"width="182">cx->-align="middle"width="334">相當於窗口的Right屬性->-align="middle"width="182">cy->-align="middle"width="334">相當於窗口的Bottom屬性->-align="middle"width="182">wFlags->-align="middle"width="334">關於如何移動窗口的標記(具體見表3)->表2HWndInsertAfter參數的可能取值及含義

-align="middle"width="214">hWndInsertAfter的可能取值->-align="middle"width="302">功能->-align="middle"width="214">某一窗口的句柄->-align="middle"width="302">將窗口放在該句柄指定的窗口後面->-align="middle"width="214">HWND_BOTTOM(1)->-align="middle"width="302">把窗口放在Z軸的最後,即所有窗口的後面->-align="middle"width="214">HWND_TOP(0)->-align="middle"width="302">將窗口放在Z軸的前面,即所有窗口的前面->-align="middle"width="214">HWND_TOPMOST(-1)->-align="middle"width="302">使窗口成為“TopMost”類型的窗口,這種類型
  的窗口總是在其它窗口的前面,真到它被關閉->-align="middle"width="214">HWND_NOTOPMOST(-2)->-align="middle"width="302">將窗口放在所有“TopMost”類型
  窗口的後面、其它類型窗口的前面->表3wFlags參數的可能值及含義

-align="middle"width="218">wFlags參數的可能值->-align="middle"width="298">功能->-align="middle"width="218">SWP_DRAWFRAME(&H20)->-align="middle"width="298">移動窗口後重畫窗口及其上的所有內容->-align="middle"width="218">SWP_HIDEWINDOW(&H80)->-align="middle"width="298">隱藏窗口,窗口隱藏後既不出現在屏幕上也不出現在任
  務欄上,但它仍然處於激活狀態->-align="middle"width="218">SWP_NOACTIVATE(&H10)->-align="middle"width="298">窗口移動後不激活窗口,當然,如果窗口在移動前就是
  激活的則例外->-align="middle"width="218">SWP_NOCOPYBITS(&H100)->-align="middle"width="298">當窗口移動後,不重畫它上面的任何內容->-align="middle"width="218">SWP_NOMOVE(&H2)->-align="middle"width="298">不移動窗口(即忽略X和Y參數)->-align="middle"width="218">SWP_NOSIZE(&H1)->-align="middle"width="298">不改變窗口尺寸(即忽略Cx和Cy參數)->-align="middle"width="218">SWP_NOREDRAW(&H8)->-align="middle"width="298">Donotremovetheimageofthewindowinitsformerposition
  fromthescreen.Inotherwords,leavebehindaghostimage
  ofthewindowinitsoldposition->-align="middle"width="218">SWP_NOZORDER(&H4)->-align="middle"width="298">不改變窗口聽Z軸位置(即忽略hWndInsertAfter參數)->-align="middle"width="218">SWP_SHOWWINDOW(&H40)->-align="middle"width="298">顯示窗口(之前必須使用過SWP_HIDEWINDOW
  隱藏窗口)->

前面已提到,利用SetWindowPos函數可以決定窗口在Z軸中的位置,具體如何放置,需根據表2給hWndInsertAfter參數賦予合適的值。
  另外,wFlags參數為SetWindowPos函數移動窗口提供了附加的特性,我們可以通過or運算將表3中若干個wFlags結合在一起使用,如SWP_NOMOVEOrSWP_NOSIZE既不移動窗口又不改變窗口的尺寸。但是要注意不要將功能沖突的值結合使用,如SWP_HIDEWINDOWOrSWP_SHOWWINDOW。
  二、程序舉例
  下面,我們以一個簡單的例子說明SetWindowPos函數的用法及如何實現TopMost類型窗口。新建工程,在普通窗體Form1上放置兩個命令按鈕cmdNormal和cmdTopMost,命令按鈕的Caption屬性分別為“變成普通窗口”和“變成TopMost窗口”。cmdNormal的Enabled屬性為False。為工程添加代碼模塊Moudall,在其中放置如下聲明代碼:
  DeclareFunctionSetWindowPosLib"user32"(ByValhwndAsLong,ByValhWndInsertAfterAsLong,ByValxAsLong,ByValyAsLong,ByValcxAsLong,ByValcyAsLong,ByValwFlagsAsLong)AsLong
  PublicConstSWP_NOMOVE=&H2'不移動窗體
  PublicConstSWP_NOSIZE=&H1'不改變窗體尺寸
  PublicConstFlag=SWP_NOMOVEOrSWP_NOSIZE
  PublicConstHWND_TOPMOST=-1'窗體總在最前面
  PublicConstHWND_NOTOPMOST=-2'窗體不在最前面
  為窗體添加代碼如下:
  PrivateSubcmdNormal_Click()
  cmdTopMost.Enabled=True
  cmdNormal.Enabled=False
  Form1.Captio="現在是普通窗口"
  SetWindowPosForm1.hwnd,HWND_NOTOPMOST,0,0,0,0,Flag
  EndSub
  PrivateSubcmdTopMost_Click()
  cmdTopMost.Enabled=False
  cmdNormal.Enabled=True
  Form1.Caption="現在是TopMost窗口"
  SetWindowPosForm1.hwnd,HWND_TOPMOST,0,0,0,0,Flag
  EndSub
  按下F5,運行程序,單擊“變成TopMost窗體”命令按鈕,此時窗口即成為TopMost類型。隨意打開桌面上的其它窗口,Form1總是處在其它窗口的前面;如果單擊“變成普通窗體”按鈕。則一切又恢復正常,一旦打開了其它窗口,則其它窗口會將Form1窗口覆蓋。
  本程序用VisualBasic5.0編寫,在Pwin95、Pwin97環境下運行正常。->

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