即即 发表于 2008-8-1 16:35:37

关于多窗体如何实现移动后仍然重合的问题

比如在设计向导式窗体时,打开第一个窗体后,用鼠标对窗体进行了移动,然后隐藏第一个窗体,打开第二个窗体,这时打开的第二个窗体在屏幕的位置是第一个窗体的初始位置,我的问题是如何让第二个窗体打开时与第一个窗体处在同一个位置,也就二个窗体实际是重合的。反之,第二个窗体移动后,打开第一个也与第二个窗体重合。

本问题在各位朋友特别是在顽固不化朋友的帮助下,问题已经解决。谢谢!

[ 本帖最后由 即即 于 2008-8-4 14:33 编辑 ]

sanhen 发表于 2008-8-2 18:19:28

第二个窗口对应第一个窗口的大小和X,Y坐标即可。

即即 发表于 2008-8-3 18:01:11

回复 2# sanhen 的帖子

老大,还没有理解这个问题,能否举个例子,谢谢。

顽固不化 发表于 2008-8-3 19:47:55

GUICreate("test GUISetTextColor", 100,100,第一个窗口X,第一个窗口Y)

pcbar 发表于 2008-8-3 20:08:04

建议用单窗口

即即 发表于 2008-8-4 10:53:51

quote]原帖由 顽固不化 于 2008-8-3 19:47 发表 http://www.autoitx.com/images/common/back.gif
GUICreate("test GUISetTextColor", 100,100,第一个窗口X,第一个窗口Y)


       是否不能实现我说的情况,一旦移动了某个窗口,这个窗口的坐标就发生了改变,而另一个窗口仍然还是他原来的坐标,因而也就不能实现重合的状态。

#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("第一个窗体", 440, 243, 193, 125)
$LabelA1 = GUICtrlCreateLabel("第一个窗体", 112, 64, 64, 17)
$ButtonA1 = GUICtrlCreateButton("打开2", 96, 160, 75, 25, 0)
$ButtonA2 = GUICtrlCreateButton("退出", 256, 160, 75, 25, 0)
$Form2 = GUICreate("第二个窗体", 440, 243, 193, 125)
$LabelB1 = GUICtrlCreateLabel("第二个窗体", 112, 64, 64, 17)
$ButtonB1 = GUICtrlCreateButton("返回1", 96, 160, 75, 25, 0)
$ButtonB2 = GUICtrlCreateButton("退出", 256, 160, 75, 25, 0)

GUISwitch($Form1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg(1)
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Switch $nMsg
                                Case $Form1
                                        Exit
                                Case $Form2
                                        _Open_Close_Form($Form1, $Form2)
                        EndSwitch
                Case $ButtonA1
                        _Open_Close_Form($Form2, $Form1)
                Case $ButtonA2
                        Exit
                Case $ButtonB1
                        _Open_Close_Form($Form1, $Form2)
                Case $ButtonB2
                        _Open_Close_Form($Form1, $Form2)
        EndSwitch
WEnd

Func _Open_Close_Form($OForm, $CForm)
        GUISwitch($OForm)
        GUISetState(@SW_SHOW)
        GUISwitch($CForm)
        GUISetState(@SW_HIDE)
EndFunc   ;==>_Open_Close_Form

[ 本帖最后由 即即 于 2008-8-4 10:57 编辑 ]

即即 发表于 2008-8-4 11:00:27

回复 5# pcbar 的帖子

建议用单窗口,是否是采用隐藏控件和打开控件的方法来实现。

顽固不化 发表于 2008-8-4 11:32:00

au3那么多函数,你就不会跟踪第一个窗口的坐标?下面是修改的,现在就是移动第2个窗口,第一个也能在第二个的位置打开。
#include <GUIConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("第一个窗体", 440, 243, 193, 125)
$LabelA1 = GUICtrlCreateLabel("第一个窗体", 112, 64, 64, 17)
$ButtonA1 = GUICtrlCreateButton("打开2", 96, 160, 75, 25, 0)
$ButtonA2 = GUICtrlCreateButton("退出", 256, 160, 75, 25, 0)
$Form2 = GUICreate("第二个窗体", 440, 243, 193, 125)
$LabelB1 = GUICtrlCreateLabel("第二个窗体", 112, 64, 64, 17)
$ButtonB1 = GUICtrlCreateButton("返回1", 96, 160, 75, 25, 0)
$ButtonB2 = GUICtrlCreateButton("退出", 256, 160, 75, 25, 0)
GUISwitch($Form1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg(1)
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Switch $nMsg
                                Case $Form1
                                        Exit
                                Case $Form2
                                        $XY = WinGetPos($Form1)
                                        $XY2 = WinGetPos($Form2)
                                        If $XY2 <> $XY Or $XY2 <> $XY Then
                                                WinMove($Form1, "", $XY2, $XY2)
                                        EndIf
                                        _Open_Close_Form($Form1, $Form2)
                        EndSwitch
                Case $ButtonA1
                        $XY = WinGetPos($Form1)
                        $XY2 = WinGetPos($Form2)
                        If $XY2 <> $XY Or $XY2 <> $XY Then
                                WinMove($Form2, "", $XY, $XY)
                        EndIf
                        _Open_Close_Form($Form2, $Form1)
                Case $ButtonA2
                        Exit
                Case $ButtonB1
                        $XY = WinGetPos($Form1)
                        $XY2 = WinGetPos($Form2)
                        If $XY2 <> $XY Or $XY2 <> $XY Then
                                WinMove($Form1, "", $XY2, $XY2)
                        EndIf
                        _Open_Close_Form($Form1, $Form2)
                Case $ButtonB2
                        $XY = WinGetPos($Form1)
                        $XY2 = WinGetPos($Form2)
                        If $XY2 <> $XY Or $XY2 <> $XY Then
                                WinMove($Form1, "", $XY2, $XY2)
                        EndIf
                        _Open_Close_Form($Form1, $Form2)
        EndSwitch
WEnd

Func _Open_Close_Form($OForm, $CForm)
        GUISwitch($OForm)
        GUISetState(@SW_SHOW)
        GUISwitch($CForm)
        GUISetState(@SW_HIDE)
EndFunc   ;==>_Open_Close_Form

[ 本帖最后由 顽固不化 于 2008-8-4 11:56 编辑 ]

pcbar 发表于 2008-8-4 20:12:30

回复 7# 即即 的帖子

可以
做了个示例,希望对你有所启发
http://www.autoitx.com/forum.php?mod=viewthread&tid=2087&page=1&extra=page%3D1

[ 本帖最后由 pcbar 于 2008-8-4 22:48 编辑 ]

553670595 发表于 2010-12-12 13:26:52

我也想知道,希望高手说下
页: [1]
查看完整版本: 关于多窗体如何实现移动后仍然重合的问题