phimiler 发表于 2020-4-9 15:49:27

[已解决]如何使2个窗口成为父子关系

本帖最后由 phimiler 于 2020-4-13 10:11 编辑

A窗口为父窗口,B窗口为子窗口,如何做到当B窗口存在的时候,无法操作A窗口上的控件。我在创建B窗口的GUICreate函数的最后一个参数设定了A窗口的句柄,照理说这两个窗口已经成为父子关系,但B窗口存在的时候还是能操作A窗口上的控件。

请问:是我的操作有误,还是A和B窗口已经成为父子关系,只不过想实现我的功能不仅仅要求两个窗口成为父子关系,还需要别的什么约束。

afan 发表于 2020-4-9 15:58:35

是父子,但仅在Z序显示上子于父上。要约束,在操作子窗时加上 GUISetState(@SW_DISABLE, $hParentWin),完事后 GUISetState(@SW_ENABLE, $hParentWin)

phimiler 发表于 2020-4-9 16:30:14

afan 发表于 2020-4-9 15:58
是父子,但仅在Z序显示上子于父上。要约束,在操作子窗时加上 GUISetState(@SW_DISABLE, $hParentWin),完 ...

谢谢,我明白你的意思了。按你的说法我写了如下代码验证,可以实现功能,但又有一个问题:关闭父窗口程序后程序还是在运行中,好像是还处在子窗口的消息循环中,Exit不是可以直接退出脚本的么,代码如下:

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$hParentWin = GUICreate("ParentWindow", 615, 437, 192, 124)
$Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 192, 96, 97, 17)
$Button1 = GUICtrlCreateButton("Button1", 248, 216, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        GUISetState(@SW_DISABLE)
                        GiveMeChild()

        EndSwitch
WEnd


Func GiveMeChild()
        #Region ### START Koda GUI section ### Form=
        $hChildWin = GUICreate("ChildWindow", 405, 293, 302, 218)
        GUISetState(@SW_SHOW)
        #EndRegion ### END Koda GUI section ###
        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case $GUI_EVENT_CLOSE
                                GUISetState(@SW_HIDE)
                                GUISetState(@SW_ENABLE, $Form1)
                EndSwitch
        WEnd
EndFunc   ;==>GiveMeChild

afan 发表于 2020-4-9 16:45:32

phimiler 发表于 2020-4-9 16:30
谢谢,我明白你的意思了。按你的说法我写了如下代码验证,可以实现功能,但又有一个问题:关闭父窗口程序 ...

要退出循环,第35行(后面的句柄错的,)其下插入一行 ExitLoop

afan 发表于 2020-4-9 16:50:52

Global $hParentWin = GUICreate("ParentWindow", 615, 437)
GUICtrlCreateCheckbox("Checkbox1", 192, 96, 97, 17)
Local $Button1 = GUICtrlCreateButton("Button1", 248, 216, 75, 25)
GUISetState()

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        Exit
                Case $Button1
                        _GiveMeChild()
        EndSwitch
WEnd

Func _GiveMeChild()
        GUISetState(@SW_DISABLE, $hParentWin)
        Local $hChildWin = GUICreate("ChildWindow", 405, 293, -1, -1, -1, -1, $hParentWin)
        GUISetState()
        While 1
                $nMsg = GUIGetMsg()
                Switch $nMsg
                        Case -3
                                GUISetState(@SW_ENABLE, $hParentWin)
                                GUIDelete($hChildWin)
                                ExitLoop
                EndSwitch
        WEnd
EndFunc   ;==>_GiveMeChild

phimiler 发表于 2020-4-9 17:24:10

afan 发表于 2020-4-9 16:45
要退出循环,第35行(后面的句柄错的,)其下插入一行 ExitLoop

谢谢大侠。。。。。。。。。。
页: [1]
查看完整版本: [已解决]如何使2个窗口成为父子关系