Windows 7 VB6 Don';t在窗体调整窗口10上自动激活子窗体
我支持的VB6旧版系统中的一个窗口将Word 2007实例作为主机。在Windows7上,可以调整父窗口的大小,而不会出现任何问题:窗口不会更新。但是,在Windows 10上,窗口在调整大小时会动态更新 我在Windows 10中遇到的问题是,在第一次更新时,子Word窗口被激活/聚焦:在子窗口被聚焦并且父窗口上的调整大小事件被取消之前,一次只能通过拖动来调整父窗口的大小,调整大小为两个像素(光标仍在调整大小图标上,但继续拖动无效)。最大化、最小化和恢复父窗口都能正常工作。关闭子Word窗口后(通过Word中的“文件”菜单),可以正常调整父窗口的大小,因为没有要激活/聚焦的子窗口。在Windows 7中,在调整父窗口大小后会自动激活子窗口,但因为在父窗口实际更新之前不会触发调整大小事件,所以这不是问题 我的难题是,我在代码中没有看到任何东西表明为什么子窗口会自动激活/聚焦,除非这只是默认的Windows行为。在这两种情况下,我非常确定我需要一种方法来避免这种情况发生 这段代码所做的一切(主要是ResizeControls()子部分;其余部分主要用于上下文)都是调整单词窗口的大小/位置,以对应父窗口中容器的新大小,这与Windows 7中的行为一致 据我所知,我不相信GetWindow()实际上激活了它获得句柄的窗口,但如果它激活了,那么这可能就是问题的原因,在这种情况下,我需要能够在不激活它的情况下获得窗口的句柄 PDFView.frm: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窗口后
事实证明我是盲人和/或没有充分阅读代码中使用的所有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