Как установить Microsoft Word в качестве владельца формы VB6? - PullRequest
0 голосов
/ 29 января 2019

Мы создаем надстройку для Microsoft Word.В этой надстройке есть немодальная форма, и мы также устанавливаем ее как форму Top Most в соответствии с требованием.Когда мы минимизируем приложение Microsoft Word, немодальная форма не минимизируется.Если мы сможем установить MS Word в качестве владельца этой формы, эта проблема решится.Пожалуйста, скажите мне, как это сделать.

Это код, который я сейчас использую для загрузки формы.

Dim Test As Long 

With frmSelectStyle
 .aaInitialize SelectStyleDlg:=Me
 .Show vbModeless
End With

Test = SetTopMostWindow(frmSelectStyle.hwnd, True)

Я знаю, что мы можем установить владельца на форму следующим образом.

frmSelectStyle.Show vbModeless , frmMain 

Но в моем случае мне нужно установить MS Word в качестве владельца.Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 30 января 2019

Ключ должен использовать функцию Windows API SetWindowLong.Вы можете обернуть эту функцию в свою собственную функцию «SetOwner», чтобы сделать ее немного проще в использовании.SetOwner принимает два дескриптора Long Windows: первый предназначен для вашего немодального окна, а второй - для главного окна приложения Word (код ниже представляет собой вариант кода, первоначально опубликованного на DevX.com).

Я протестировал приведенный ниже код, и немодальное окно сворачивается вместе с Word, если Word свернуто.

Option Explicit

Private hwndOriginal As Long

Private Declare Function FindWindow 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)
Const GWL_HWNDPARENT = (-8)
Function SetOwner(ByVal HwndtoUse, ByVal HwndofOwner) As Long

    SetOwner = SetWindowLong(HwndtoUse, GWL_HWNDPARENT, HwndofOwner)

End Function
Private Sub Form_Load()

   Dim hWndWord As Long

   ' start an instance of Microsoft Word
   Dim WordApp As Word.Application
   Set WordApp = CreateObject("Word.Application")

   ' make sure it's visible
   WordApp.Application.Visible = True

   ' use the FindWindow API to find a window class of "OpusApp" with the specified Word-application caption
   hWndWord = FindWindow("OpusApp", WordApp.Caption)

   hwndOriginal = SetOwner(Me.hWnd, hWndWord)

End Sub

Private Sub Form_Unload(Cancel As Integer)

   SetOwner Me.hWnd, hwndOriginal

End Sub
...