Help and Support

文章編號: 184297 - 上次校閱: 2003年10月15日 - 版次: 1.0

HOWTO:建立永遠停留在最上層的表單

本文曾發行於 CHT184297

在此頁中

全部展開 | 全部摺疊

結論

Microsoft Visual Basic 並沒有提供可讓表單成為最上層視窗的屬性或方法。您可以使用 SetWindowPos Win32 API 來達成此項目的。

本文示範如何使用 SetWindowPos Win32 API 來設定表單成為最上層的視窗。

其他相關資訊

下面的程式碼範例使用一個稱為 SetTopMostWindow 的函數。SetTopMostWindow 函數會依據傳給它的兩個參數:hwnd 與 Topmost,將視窗設為最上層的視窗或是一般視窗。

hwnd 參數會指定是要將視窗的控制碼 (handle) 設為最上層或一般。

Topmost 參數會指定是要將表單設為最上層或一般。如果此值為 True,該函數就會將表單設為永遠停留在最上層。如果此值為 False,該函數就會將表單設成一般視窗。

逐步解說範例

  1. 建立新的 [標準執行檔] 專案,根據預設值,隨即建立 Form1。
  2. 在 Form1 上加入兩個指令按鈕 (Command1 與 Command2)。
  3. 將 Command1 的標題 (Caption) 屬性設為「Always on top」。
  4. 將 Command2 的標題 (Caption) 屬性設為「Normal」。
  5. 將下面程式碼放入 Form1 的 [宣告] 區段中:
          Option Explicit
    
          Private Sub Command1_Click()
             Dim lR As Long
             lR = SetTopMostWindow(Form1.hwnd, True)
          End Sub
    
          Private Sub Command2_Click()
             Dim lR As Long
             lR = SetTopMostWindow(Form1.hwnd, False)
          End Sub
    
  6. 在 [專案] 功能表上,按一下 [新增模組],在專案中加入新模組。
  7. 將下面程式碼加入新模組中:
          Option Explicit
          Public Const SWP_NOMOVE = 2
          Public Const SWP_NOSIZE = 1
          Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
          Public Const HWND_TOPMOST = -1
          Public Const HWND_NOTOPMOST = -2
    
          Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos"  _
                (ByVal hwnd As Long, _
                ByVal hWndInsertAfter As Long, _
                ByVal x As Long, _
                ByVal y As Long, _
                ByVal cx As Long, _
                ByVal cy As Long, _
                ByVal wFlags As Long  ) As Long
    
          Public Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) _
             As Long
    
             If Topmost = True Then 'Make the window topmost
                SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, _
                   0, FLAGS)
             Else
                SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, _
                   0, 0,FLAGS)
                SetTopMostWindow = False
             End If
          End Function
    

    注意:在上面的程式碼範例中,位於一行程式碼結尾的底線 (_) 是換行接續符號。

  8. 注意:在上面的程式碼範例中,位於一行程式碼結尾的底線 (_) 是換行接續符號。 按 F5 以執行此專案。
如果您按一下 [Always on top] 指令按鈕,表單就會變成最上層的視窗,並且一直位在每一個視窗的上層;您無法將任何其他視窗移到它的上層。如果您按一下 [Normal] 按鈕,表單的顯示情形會如同一般視窗 (您可以將其他視窗移到它的上方)。

?考

如需詳細資訊,請參閱 Microsoft Knowledge Base 中的下列文件:
84251? (http://support.microsoft.com/kb/84251/EN-US/ ) How to Create a Topmost or Floating Window in Visual Basic

150233? (http://support.microsoft.com/kb/150233/EN-US/ ) FIX: TopMost Window Does Not Stay on Top in Design Environment
請同時參閱位於 VB\Samples\CallDlls 資料夾中的專案範例:CallDlls,此範例含有將表單設為最上層視窗的程式碼,並在範例中提供解說。
本文件是根據 Microsoft Knowledgebase 文件編號 Q184297 翻譯的。若要參考原始英文文件內容,請至以下網址:

http://support.microsoft.com/support/kb/articles/Q184/2/97.asp (http://support.microsoft.com/kb/184297/en-us?ln=en-us&sd=gn&fr=0)

這篇文章中的資訊適用於:
  • Microsoft Visual Basic 4.0 Professional Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 4.0 Enterprise Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
關鍵字:?
kbhowto kbvbp400 kbvbp500 kbvbp600 kbgrpdsvb KB184297
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

文章翻譯