找回密码
 加入
搜索
查看: 3705|回复: 11

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

[复制链接]
发表于 2009-5-26 15:48:11 | 显示全部楼层 |阅读模式
本帖最后由 ejzhang 于 2009-6-20 18:29 编辑

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

如果不行试试使用 
@SW_HIDE = 隐藏窗口
@SW_SHOW = 使已隐藏窗口显示出来(默认)
发表于 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[0]
            Case $GUI_EVENT_CLOSE
                If $nMsg[1] == $Form1 Then
                    Exit
                ElseIf $nMsg[1] == $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
 楼主| 发表于 2009-6-9 21:40:16 | 显示全部楼层
楼上的思路是把主窗口隐藏,我想在不隐藏主窗口的情况下弹出一个子窗口,并且在不关闭子窗口时无法访问主窗口,不知能否实现?谢谢!
发表于 2009-6-9 21:48:38 | 显示全部楼层
留个名,学习下
发表于 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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2009-6-9 22:31:04 | 显示全部楼层
学习下楼上的代码
 楼主| 发表于 2009-6-20 18:29:09 | 显示全部楼层
解决了,弹出子窗体时先把父窗体禁用(GUISetState(@SW_DISABLE, $frmParentWin)),关闭子窗体时再把父窗体启用(GUISetState(@SW_ENABLE, $frmParentWin))就可以了。
多谢楼上几位的解答!
发表于 2009-6-20 18:43:56 | 显示全部楼层
很好,十分强大..
发表于 2009-6-24 21:09:05 | 显示全部楼层
嗯!很不错,学习了。
发表于 2009-6-24 22:29:05 | 显示全部楼层
学习了
发表于 2014-5-9 23:30:32 | 显示全部楼层
嗯!很不错,学习了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-23 05:30 , Processed in 0.074290 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表