Окно в этой устаревшей системе VB6, которую я поддерживаю, содержит экземпляр Word 2007 как дочернее окно . В Windows 7 размер родительского окна можно изменить без каких-либо проблем: окно не обновляется до тех пор, пока не будет отпущена мышь после изменения размера . Однако в Windows 10 окно обновляется динамически при изменении его размера.
Проблема, с которой я сталкиваюсь в Windows 10, заключается в том, что дочернее окно Word активируется / фокусируется на первом обновлении: вы можно только перетащить, чтобы изменить размер родительского окна на пару пикселей за раз, прежде чем дочернее окно будет сфокусировано и событие изменения размера родительского окна будет отменено (курсор все еще находится на значке изменения размера, но продолжение перетаскивания не оказывает никакого влияния). Максимизация, минимизация и восстановление родительского окна - все работает нормально. Как только дочернее окно Word закрыто (через меню файлов в Word), родительское окно можно изменить в обычном размере, потому что нет дочернего окна для активации / фокусировки. Тот же автомат c -child-window-активации-after-parent-window-resizing происходит в Windows 7, но поскольку событие resize не срабатывает до тех пор, пока родительское окно фактически не обновлено, это не проблема .
Моя загадка состоит в том, что я не вижу в коде ничего, что подсказывало бы, почему дочернее окно автоматически активируется / фокусируется, если только это не поведение по умолчанию Windows. В любом случае, я почти уверен, что мне нужен способ, чтобы этого не произошло.
Все, что этот код явно делает (в первую очередь подпрограмма ResizeControls (), остальное здесь главным образом для контекста) - изменение размера / позиционирование окна Word в соответствии с новым размером контейнера в родительском окне, что соответствует поведению в Windows 7.
Из того, что я могу сказать, я не верьте , что GetWindow () на самом деле активирует окно, к которому обращается дескриптор, но если это так, то это, вероятно, причина проблемы, и в этом случае мне нужно иметь возможность получить дескриптор окна без его активации.
PDFView.frm :
Begin VB.Form frmPDFView
Caption = "Untitled"
ClientHeight = 8655
ClientLeft = 1320
ClientTop = 1665
ClientWidth = 9270
' ...
Begin VB.PictureBox picContainer
BackColor = &H00FFFFFF&
Height = 4215
Left = 1080
ScaleHeight = 4155
ScaleWidth = 4995
TabIndex = 0
Top = 120
Width = 5055
End
End
Private Sub ResizeControls()
On Error Resume Next
Dim pWndChild As Long
Dim r As RECT
Dim rtn As Long
picContainer.Left = 100
picContainer.Height = Me.Height - 1300
picContainer.Width = Me.Width - 350
picContainer.Top = 300
pWndChild = GetWindow(picContainer.hWnd, GW_CHILD)
rtn = GetLastError
If (pWndChild) Then
rtn = GetClientRect(picContainer.hWnd, r)
rtn = SetWindowPos(pWndChild, 0, 0, 0, r.Right - r.Left, r.Bottom - r.Top, SWP_NOZORDER Or SWP_NOMOVE)
Else
rtn = GetLastError
End If
End Sub
Private Sub Form_Resize()
On Error GoTo ERROR_HANDLER
Call ResizeControls
Exit Sub
ERROR_HANDLER:
Err.Clear
Resume Next
End Sub