Windows 7 VB6 Don';t在窗体调整窗口10上自动激活子窗体

Windows 7 VB6 Don';t在窗体调整窗口10上自动激活子窗体,windows-7,vb6,windows-10,Windows 7,Vb6,Windows 10,我支持的VB6旧版系统中的一个窗口将Word 2007实例作为主机。在Windows7上,可以调整父窗口的大小,而不会出现任何问题:窗口不会更新。但是,在Windows 10上,窗口在调整大小时会动态更新 我在Windows 10中遇到的问题是,在第一次更新时,子Word窗口被激活/聚焦:在子窗口被聚焦并且父窗口上的调整大小事件被取消之前,一次只能通过拖动来调整父窗口的大小,调整大小为两个像素(光标仍在调整大小图标上,但继续拖动无效)。最大化、最小化和恢复父窗口都能正常工作。关闭子Word窗口后

我支持的VB6旧版系统中的一个窗口将Word 2007实例作为主机。在Windows7上,可以调整父窗口的大小,而不会出现任何问题:窗口不会更新。但是,在Windows 10上,窗口在调整大小时会动态更新

我在Windows 10中遇到的问题是,在第一次更新时,子Word窗口被激活/聚焦:在子窗口被聚焦并且父窗口上的调整大小事件被取消之前,一次只能通过拖动来调整父窗口的大小,调整大小为两个像素(光标仍在调整大小图标上,但继续拖动无效)。最大化、最小化和恢复父窗口都能正常工作。关闭子Word窗口后(通过Word中的“文件”菜单),可以正常调整父窗口的大小,因为没有要激活/聚焦的子窗口。在Windows 7中,在调整父窗口大小后会自动激活子窗口,但因为在父窗口实际更新之前不会触发调整大小事件,所以这不是问题

我的难题是,我在代码中没有看到任何东西表明为什么子窗口会自动激活/聚焦,除非这只是默认的Windows行为。在这两种情况下,我非常确定我需要一种方法来避免这种情况发生

这段代码所做的一切(主要是ResizeControls()子部分;其余部分主要用于上下文)都是调整单词窗口的大小/位置,以对应父窗口中容器的新大小,这与Windows 7中的行为一致

据我所知,我不相信GetWindow()实际上激活了它获得句柄的窗口,但如果它激活了,那么这可能就是问题的原因,在这种情况下,我需要能够在不激活它的情况下获得窗口的句柄

PDFView.frm:


事实证明我是盲人和/或没有充分阅读代码中使用的所有Windows函数的文档。第二天找到了解决方案,但忘记了回来回答这个问题,但经的确认,问题出在SetWindowPos()。需要将问题传递到SetWindowPos(),以防止激活目标窗口(在我的例子中,是子单词窗口)。

对于
SetWindowPos
还有一个
Const SWP\u NOACTIVATE,只要长=&H10
标志。如果不设置
pWndChild
,就会被激活。
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