According to MS顯示當你告訴一個模式窗體在VB6不「設計」強制模式窗體在任務欄
顯示在任務欄中,但有什麼辦法使VB6模態的形式顯示在任務欄(ShowInTaskbar屬性在模態時沒有效果)
在我們的一個應用程序中,我們有一個模式登錄窗體,它是在啓動屏幕卸載後顯示在應用程序中的第一種窗體,所以如果用戶移動頂部的另一個窗口,您不知道它被加載。
According to MS顯示當你告訴一個模式窗體在VB6不「設計」強制模式窗體在任務欄
顯示在任務欄中,但有什麼辦法使VB6模態的形式顯示在任務欄(ShowInTaskbar屬性在模態時沒有效果)
在我們的一個應用程序中,我們有一個模式登錄窗體,它是在啓動屏幕卸載後顯示在應用程序中的第一種窗體,所以如果用戶移動頂部的另一個窗口,您不知道它被加載。
您可以使用類似這樣的模式窗體
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const GWL_EXSTYLE As Long = (-20)
Private Const SW_HIDE As Long = 0
Private Const SW_SHOW As Long = 5
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private m_bActivated As Boolean
Private Sub Form_Activate()
If Not m_bActivated Then
m_bActivated = True
Call SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW)
Call ShowWindow(hwnd, SW_HIDE)
Call ShowWindow(hwnd, SW_SHOW)
End If
End Sub
您將不得不進行子類化,如來自VBAccelerator的this。
免責聲明 - 改編自PM2的答案this question這是可能重複,但我們不能說,因爲原來的海報從來沒有告訴我們他們的形式是否爲模式。
感謝@Jeff用於固定鏈接! – MarkJ 2014-05-01 12:27:57
將這個代碼在你的模式窗口:
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Sub Form_Activate()
Call ShowWindow(Me.hWnd, vbHide)
Me.Caption = Me.Caption
Call ShowWindow(Me.hWnd, vbNormalFocus)
End Sub
這對我很有用,比子類更容易。有人可以解釋「Me.Caption = Me.Caption」的用途嗎? – 2015-07-30 17:35:16
據我所知,它會導致Windows更新某些窗口的屬性,以便重新評估當您再次顯示時窗口是否應出現在任務欄中。通過在ShowWindow中使用vbNormalFocus標誌,只要窗口的某些屬性「已更改」,窗口就會將它視爲窗口首次顯示。 – cjc 2016-11-16 23:21:41
優秀的簡單解決方案謝謝 – 2012-01-06 10:09:48