VB6 - Как сделать форму второй вершины больше всего? - PullRequest
0 голосов
/ 06 мая 2018

Я использовал следующий код VB6,

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
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOACTIVATE = &H10
Private Const SWP_SHOWWINDOW = &H40
Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1

Private Sub Form_Activate()
    Dim R As Long
    R = SetWindowPos(frmSlide.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End Sub

и форма установлена ​​с этими свойствами,

   MaxButton       =   False
   MinButton       =   False
   ShowInTaskbar   =   False
   StartUpPosition =   CenterScreen
   WindowState     =   Maximized

Это заставит форму перейти на задний план. Это не пошло на задний план. Идея здесь состоит в том, чтобы заставить форму вернуться только на одно окно назад. Например: если открыто окно программы «Блокнот». Эта программа должна быть только на фоне Блокнота, а не других окон программы. Это возможно?

Ответы [ 2 ]

0 голосов
/ 19 мая 2018

Я провел некоторое исследование на основе Таруна Лалвани информации , и это то, что сработало для меня,

Добавьте Timer к форме и используйте этот код,

Option Explicit

Private Declare Function FindWindow1 Lib "User32" Alias "FindWindowA" (ByVal lpclassname As String, ByVal lpWindowName As String) 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 Const GWL_HWNDPARENT = -8

Private parenthwnd As Long
Private strTitle As String

Public Function FindWindowHandle(Caption As String) As Long
  FindWindowHandle = FindWindow1(vbNullString, Caption)
End Function

Private Sub Form_Load()
    On Error Resume Next
    strTitle = "Untitled - Notepad"

    With Timer1
        .Interval = 2000
        .Enabled = True
    End With
End Sub

Private Sub Timer1_Timer()
    If FindWindowHandle(strTitle) <> 0 Then
        Timer1.Enabled = False
        parenthwnd = 0
        parenthwnd = FindWindow1(vbNullString, strTitle)
        Dim R As Long
        R = SetWindowLong(parenthwnd, GWL_HWNDPARENT, Me.hWnd)
    End If
End Sub

Когда Блокнот открыт, он будет родительским для этой формы.

Предупреждение: Я установил свойства формы на них,

   MaxButton       =   False
   MinButton       =   False
   ShowInTaskbar   =   False
   StartUpPosition =   CenterScreen
   WindowState     =   Maximized

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

0 голосов
/ 13 мая 2018

Да, вы можете сделать это. Что вам нужно сделать, это найти дескриптор окна вашей внешней программы, а затем сказать окнам, что ваша форма должна рассматриваться как родительская

SetWindowLong(hwndChild, GWL_HWNDPARENT, hwndOwner)

PS: кредиты https://stackoverflow.com/a/834509/2830850

См. Также нижеследующую тему SO

Владелец окна Win32 против родительского окна?

...