smooth 发表于 2014-3-28 20:08:00

请教如何禁止点击主界面?

本帖最后由 smooth 于 2014-3-28 20:09 编辑

程序执行时会弹出来一个小的界面,弹出来后我想禁止点击主界面,类似于MSGBOX加了主界面的句柄的那种效果,等这个小的界面消失之后才恢复主界面。不知道可否实现?

水木子 发表于 2014-3-28 21:08:22

本帖最后由 水木子 于 2014-3-28 21:10 编辑

可以实现啊!简单的父子窗,就可以搞定了。
Opt('GUIOnEventMode', 1)

$MyGui1 = GUICreate('父窗口', 300, 280)
GUISetOnEvent(-3, '_GuiMsg')
$Btnton1_1 = GUICtrlCreateButton('显示子窗口', 100, 110, 100, 30)
GUICtrlSetOnEvent(-1, '_GuiMsg')
GUISetState()

$MyGui2 = GUICreate('子窗口', 200, 100)
GUISetOnEvent(-3, '_GuiMsg')
$Btnton2_1 = GUICtrlCreateButton('显示', 50, 30, 100, 30)
GUICtrlSetOnEvent(-1, '_GuiMsg')

While 1
        Sleep(250)
WEnd

Func _GuiMsg()
        Switch @GUI_CtrlId
                Case -3
                        Switch @GUI_WinHandle
                                Case $MyGui1
                                        Exit
                                Case $MyGui2
                                        GUISetState(@SW_ENABLE, $MyGui1)
                                        GUISetState(@SW_HIDE, $MyGui2)
                        EndSwitch
                Case $Btnton1_1
                        GUISetState(@SW_SHOW, $MyGui2)
                        GUISetState(@SW_DISABLE, $MyGui1)
                Case $Btnton2_1
                        MsgBox(64, '测试', '我是子窗口')
        EndSwitch
EndFunc   ;==>_GuiMsg

skyfree 发表于 2014-3-28 22:17:06

简单的解决方法,弹出子窗体时,把父窗体的属性设置为@SW_DISABLE,子窗体结束时再恢复。

seniors 发表于 2014-3-29 08:12:51

可以实现啊!简单的父子窗,就可以搞定了。
水木子 发表于 2014-3-28 21:08 http://www.autoitx.com/images/common/back.gif

水版的事件模式,另人惊叹
个人习惯,事件模式了就用不同的函数,用同一函数的话就窗口模式吧

smooth 发表于 2014-3-29 08:16:38

水版的写的模式,我还是第一次看到,看得有点晕。

smooth 发表于 2014-3-29 08:55:07

本帖最后由 smooth 于 2014-3-29 09:03 编辑

回复 3# skyfree

按照S大说的,实现起来很简单,多谢了。水版的方法也非常好,值得深入研究。

$Form_M = GUICreate("", 280, 100, -1, -1, -1, -1, $Form1)

GUISetState(@SW_SHOW)
GUISetState(@SW_DISABLE, $Form1)

水木子 发表于 2014-3-29 11:34:04

本帖最后由 水木子 于 2014-3-29 11:36 编辑

回复 4# seniors

回复 5# smooth
不用事件模式也行,其实道理都差不多。
这算是比较简单的父子窗练习,没什么深奥的东西。
Global $iGuiState = 0

$MyGui1 = GUICreate('父窗口', 300, 280)
$Btnton1_1 = GUICtrlCreateButton('显示子窗口', 100, 110, 100, 30)
GUISetState()

$MyGui2 = GUICreate('子窗口', 200, 100)
$Btnton2_1 = GUICtrlCreateButton('显示', 50, 30, 100, 30)

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case -3
                        If $iGuiState = 0 Then
                                Exit
                        Else
                                GUISetState(@SW_ENABLE, $MyGui1)
                                GUISetState(@SW_HIDE, $MyGui2)
                                $iGuiState = 0
                        EndIf               
                Case $Btnton1_1
                        GUISetState(@SW_SHOW, $MyGui2)
                        GUISetState(@SW_DISABLE, $MyGui1)
                        $iGuiState = 1
                Case $Btnton2_1
                        MsgBox(64, '测试', '我是子窗口')
        EndSwitch
WEnd

smooth 发表于 2014-3-29 12:51:19

本帖最后由 smooth 于 2014-3-29 12:55 编辑

回复 7# 水木子

这个更好理解,因为我没有研究过事件模式。不知道在创建窗口的时候,添加另外一个窗口的句柄,这样做有什么效果?直接看好像看不出来。谢谢!

annybaby 发表于 2014-3-30 17:20:49

模态窗口更好..

wilask 发表于 2014-3-31 11:25:01

有用,收藏一下
页: [1]
查看完整版本: 请教如何禁止点击主界面?