Установка формы как самого заднего.Форма, которая всегда остается в фоновом режиме - vb6 - PullRequest
0 голосов
/ 04 октября 2010

Есть ли способ установить форму как самую заднюю (форма, которая всегда остается сзади, независимо от того, что вы нажимаете на форму) Я пишу замену оболочки и просто использую topmost в каждом окне, которое я запускаю.вещи для некоторых приложений.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 октября 2010

Я нашел альтернативу, использующую хук для обнаружения открытых окон. Я открываю все новые окна (с parrent или без parrent как верхний), который acutaly решает проблему и помещает интерфейс оболочки в фоновый режим, как и должно быть Очень упрощенная подключаемая функция выглядит примерно так:

`Public Sub WindowCreated(hwnd As Long)

Если не hwnd = Me.hwnd Тогда If IsWindowVisible (hwnd) Тогда

      WindowHandle hwnd, 6 ' set form as topmost and focused
        WindowHandle hwnd, 5

End If end sub `

0 голосов
/ 04 октября 2010

Отказ от ответственности: это полностью не проверено.

Во-первых, в Form_Load вы хотите использовать API-интерфейс SetWindowPos, чтобы поместить вашу форму ниже всех остальных:

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.

...