我最近购买了一台34英寸宽屏显示器。我正在使用戴尔显示管理器设置不同的窗口,使我能够整齐地打开多个word文档等。
当我使用Access时,我可以将应用程序窗口正确停靠在屏幕的1/2或1/3处。但是,当我打开一个表单时(因为它可能是一个孩子?),它不会停留在父窗口或戴尔显示管理器的范围内。
所以,我的想法是将任何弹出窗体的大小调整为父访问窗口的尺寸,具有相同的左,顶部,宽度和高度。
然而,尽管尝试了一些不同的技术,但我还是无法实现这一目标。
有人有任何想法吗?
谢谢!
编辑:谢谢Jashin。我已经实现了您的代码,但表单仍然没有像我预期的那样出现。这是我用过的代码:
SetWindowPos hWndChild, hWndParent, mainRECT.wdw_left, mainRECT.wdw_top, mainRECT.wdw_right, mainRECT.wdw_bottom, &H4
当表单加载高度时左侧略微偏离,但表单非常薄。我尝试从mainRECT.wdw_right获取宽度 - mainRECT.wdw_left,但结果相同。
最终编辑:通过对@Jashin提供的代码进行一些调整。这是最终的代码:
Dim hWndParent As LongPtr
Dim hWndChild As LongPtr
Dim mainRECT As RECT
hWndParent = Application.hWndAccessApp
hWndChild = Me.hwnd
GetWindowRect hWndParent, mainRECT
SetParent hWndChild, hWndParent
SetWindowPos hWndChild, 0, mainRECT.wdw_left, mainRECT.wdw_top, mainRECT.wdw_right - mainRECT.wdw_left, mainRECT.wdw_bottom, &H4
Me.SetFocus
DoCmd.MoveSize 0, 0`
答案 0 :(得分:2)
我不熟悉戴尔显示器管理器,但是,如果我理解您的问题,您正在寻找一些程序来强制在屏幕上的任何位置放置弹出窗体。正如@ThunderFrame建议您无法使用Access API执行此操作,但您可以使用Windows API执行此操作。
创建一个模块并声明以下函数
Public Type RECT
wdw_left As Long
wdw_top As Long
wdw_right As Long
wdw_bottom As Long
End Type
Public Declare PtrSafe Function SetParent Lib "user32" _
(ByVal hWndChild As LongPtr, _
ByVal hWndParent As LongPtr) As Long
Public Declare PtrSafe Function SetWindowPos Lib "user32" _
(ByVal hwnd As LongPtr, _
ByVal hWndInsertAfter As LongPtr, _
ByVal x As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
Public Declare PtrSafe Function GetWindowRect Lib "user32" _
(ByVal hwnd As LongPtr, _
lpRect As RECT) As Long
注意我正在使用 PtrSafe 和 LongPtr 关键字,因为我正在使用64位系统;如果您使用的是32位系统,则可以删除PtrSafe关键字并将Long替换为LongPtr。
然后在弹出窗体的Form_Open()事件中编写以下代码。
Dim hWndParent As LongPtr ' handle of your parent form (access window or
' any other form you want to set as parent
Dim hWndChild As LongPtr ' handle of the child pop-up form
Dim mainRECT As RECT ' coordinates of the parent form
hWndParent = Form_frm_home.hwnd ' or hWndAccessApp to get the handle of
' the main Access Window
hWndChild = Form_frm_child.hwnd
GetWindowRect hWndParent, mainRECT ' this gets the coordinates of the
' parent window
SetParent hWndChild, hWndParent ' set the pop-up form as child of the
' parent form
SetWindowPos hWndChild, hWndParent, left, top, width, heigth, &H4
SetWindowPos功能允许您在屏幕上的任何位置放置弹出窗体。您可以使用以下代码从RECT结构访问父表单的坐标
mainRECT.wdw_left
mainRECT.wdw_top
mainRECT.wdw_right
mainRECT.wdw_bottom
SetParent函数允许您创建子表单,因此它将始终位于父表单的边界之间,并将随主表单(或访问窗口)一起移动。
希望这有帮助!
答案 1 :(得分:0)
您无法使用Access API直接执行此操作,但您可以使用某些Windows API函数来实现您之后的结果。 您需要执行以下操作