有沒有辦法將表單設置爲最後(無論您單擊表單上的哪個表單都會始終保留在後面) 我正在寫一個shell替換並僅使用在我開始的每個窗口中,最頂層的東西真的讓某些應用程序變得麻煩。將表格設置爲最靠後。一種始終停留在後臺的表單 - vb6
謝謝!
有沒有辦法將表單設置爲最後(無論您單擊表單上的哪個表單都會始終保留在後面) 我正在寫一個shell替換並僅使用在我開始的每個窗口中,最頂層的東西真的讓某些應用程序變得麻煩。將表格設置爲最靠後。一種始終停留在後臺的表單 - vb6
謝謝!
聲明:這是完全未經測試的。
首先,上的Form_Load你要使用SetWindowPos API把所有其他人以下表單:
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_BOTTOM = 1
Private Declare Function SetWindowPos Lib "user32" (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
' Somewhere in form_load...
RetVal = SetWindowPos(Me.hwnd, HWND_BOTTOM, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
如果這還不夠,你可能需要繼承的形式,並觀看WM_ACTIVATE和/或WM_MOUSEACTIVATE並重定向這些消息。對於WM_MOUSEACTIVATE,重定向到MA_NOACTIVATE可能工作;對於WM_ACTIVATE消息,重定向到WA_INACTIVE。
我發現了一個使用鉤子來檢測打開的窗口的替代方案。我打開所有新窗口(以parrent或no parrent作爲最頂層),這個acutaly可以解決問題,並將shell界面放在後臺中。非常簡單掛鉤函數看起來是這樣的:
`Public Sub WindowCreated(hwnd As Long)
如果沒有HWND = Me.hwnd然後 如果IsWindowVisible(HWND)然後
WindowHandle hwnd, 6 ' set form as topmost and focused
WindowHandle hwnd, 5
結束如果 端子`