ejzhang 发表于 2009-5-26 15:48:11

如何在主窗口中弹出一个列表对话框?

本帖最后由 ejzhang 于 2009-6-20 18:29 编辑

需求:在主窗口单击“开始”后,出现一个列表框要求用户选择其中一项(此时除了从列表框中选择不能进行其他操作),用户选择后即进行下一步操作。
思路1:在主窗口中弹出一个列表框,选择其中一项后再回到主窗口
我们没到怎么弹出列表框。
或者思路2:弹出一个模式窗口(就是在关闭之前不能对父窗口进行操作),在模式窗口中显示一个列表框。
但是我发现弹出的窗口不管用什么参数,都可以对其父窗口进行操作,这样很容易出问题,比如又点了父窗口的按钮就会再弹出一个同样的窗口。
这两个问题能解决一个就可以,请各位大虾帮忙,谢谢!

maxkingmax 发表于 2009-5-26 21:51:15

在单击“开始”后,使用GUISetState(@SW_DISABLE ,主窗口句柄)
等到选择完后再使用 GUISetState(@SW_ENABLE,主窗口句柄)

如果不行试试使用 
@SW_HIDE = 隐藏窗口
@SW_SHOW = 使已隐藏窗口显示出来(默认)

lynfr8 发表于 2009-5-26 22:37:11

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
While 1
    $Form1 = GUICreate(" 主窗口中弹出列表对话框", 400, 200, 200, 200)
    $Button1 = GUICtrlCreateButton("开始", 150, 144, 121, 33, 0)
    $Form2 = GUICreate("列表对话框",200, 200, 200, 200)
    $Button2 = GUICtrlCreateButton("确定", 24, 40, 121, 33, 0)
    GUICtrlCreateCombo("请选择", 24, 10, 121, 33)
    GUISetState(@SW_SHOW, $Form1)

    While 1
      $nMsg = GUIGetMsg(1)
      Switch $nMsg
            Case $GUI_EVENT_CLOSE
                If $nMsg == $Form1 Then
                  Exit
                ElseIf $nMsg == $Form2 Then
                  GUISetState(@SW_SHOW, $Form1)
                  GUISetState(@SW_HIDE, $Form2)
                EndIf
            Case $Button1
                GUISetState(@SW_SHOW, $Form2)
                GUISetState(@SW_HIDE, $Form1)
            Case $Button2
                GUISetState(@SW_SHOW, $Form1)
                GUISetState(@SW_HIDE, $Form2)
      EndSwitch
    WEnd
WEnd

ejzhang 发表于 2009-6-9 21:40:16

楼上的思路是把主窗口隐藏,我想在不隐藏主窗口的情况下弹出一个子窗口,并且在不关闭子窗口时无法访问主窗口,不知能否实现?谢谢!

kn007 发表于 2009-6-9 21:48:38

留个名,学习下

lynfr8 发表于 2009-6-9 22:20:46

本帖最后由 lynfr8 于 2009-6-9 22:23 编辑

不隐藏主窗口的情况下弹出一个子窗口,并且在不关闭子窗口时无法访问主窗口

代码修改于作者sanhen
#include <GuiConstants.au3>
#include <WindowsConstants.au3>
#include <winapi.au3>
Opt("GUIOnEventMode", 1)

$Main_GUI = GUICreate("Main", 500, 500)
GUISetOnEvent($GUI_EVENT_CLOSE, "_GuiMsg")
GUISetBkColor(0x008040, $Main_GUI)
$Btn_Show = GUICtrlCreateButton("Show All", 10, 10, 90, 20)
GUISetState(@SW_SHOW, $Main_GUI)
$Child1_GUI = GUICreate("Child1", 200, 100, -1, -1, BitOR($WS_MINIMIZEBOX, $WS_MAXIMIZEBOX, $WS_SIZEBOX))
GUISetOnEvent($GUI_EVENT_CLOSE, "_GuiMsg")
$Btn_Test1 = GUICtrlCreateButton("Test", 10, 10, 90, 20)
GUICtrlSetOnEvent($Btn_Show, "_GuiMsg")
GUICtrlSetOnEvent($Btn_Test1, "_GuiMsg")

While 1
Sleep(250)
WEnd

Func _GuiMsg()
Switch @GUI_CTRLID
Case $GUI_EVENT_CLOSE
Switch @GUI_WinHandle
Case $Main_GUI
Exit
Case $Child1_GUI
GUISetState(@SW_HIDE,$Child1_GUI )
GUISetState(@SW_ENABLE ,$Main_GUI )
EndSwitch
Case $Btn_Show
GUISetState(@SW_SHOW,$Child1_GUI )
GUISetState(@SW_DISABLE ,$Main_GUI )
Case $Btn_Test1
MsgBox(64,"测试","我是子窗口")
EndSwitch
EndFunc

kn007 发表于 2009-6-9 22:31:04

学习下楼上的代码

ejzhang 发表于 2009-6-20 18:29:09

解决了,弹出子窗体时先把父窗体禁用(GUISetState(@SW_DISABLE, $frmParentWin)),关闭子窗体时再把父窗体启用(GUISetState(@SW_ENABLE, $frmParentWin))就可以了。
多谢楼上几位的解答!

javarike 发表于 2009-6-20 18:43:56

很好,十分强大..

水木子 发表于 2009-6-24 21:09:05

嗯!很不错,学习了。

catcher 发表于 2009-6-24 22:29:05

:face (29):学习了

qsy666888 发表于 2014-5-9 23:30:32

嗯!很不错,学习了
页: [1]
查看完整版本: 如何在主窗口中弹出一个列表对话框?