找回密码
 加入
搜索
查看: 7991|回复: 12

[GUI管理] 【已解决】如何让 FileOpenDialog 成为模态对话框 (即不能操作后面的主窗口)

  [复制链接]
发表于 2011-2-23 17:58:15 | 显示全部楼层 |阅读模式
本帖最后由 xiehuahere 于 2011-2-23 21:45 编辑

FileOpenDialog 打开的对话框默认是非模态的,还能切换到后面的主窗口去进行操作,需要在程序中disable掉主窗口上很多相关的控件,防止不符合流程的错误操作,比较麻烦。
如何让 FileOpenDialog 成为模态对话框,只有关闭后才能操作主界面?
求教。
发表于 2011-2-23 18:17:55 | 显示全部楼层
支持,努力学习
发表于 2011-2-23 20:56:01 | 显示全部楼层
Opt("GUIOnEventMode", 1)
$MyGui = GUICreate('', 400, 300)
GUISetOnEvent(-3, '_GuiEvent')
$Button = GUICtrlCreateButton('按钮', 100, 100, 80, 30)
GUICtrlSetOnEvent(-1, '_GuiEvent')
GUISetState()

While 1
        Sleep(250)
WEnd

Func _GuiEvent()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case 3
                        GUISetState(65)
                        FileOpenDialog('', '', '全部 (*.*)', 1 + 4, $MyGui)
                        GUISetState(64)
        EndSwitch
EndFunc   ;==>_GuiEvent
 楼主| 发表于 2011-2-23 21:44:24 | 显示全部楼层
谢谢!!!!!
原来窗口的 disable 和 enable 是这个用途。


用 MsgBox 试了一下才知道 65 就是@SW_DISABLE,64就是@SW_ENABLE。
我想也只能是这两个了,呵呵。不过还是习惯直接用宏名,比较直观。
看来水木子很喜欢卖关子啊,意思是回去多查查帮助 ;-)
发表于 2011-2-23 21:56:56 | 显示全部楼层
回复 3# 水木子


学习了,水木子版主。
其实就是这样的:(你所使用的代号可能不少人看不懂,呵呵)
                GUISetState(@SW_DISABLE)
                        FileOpenDialog('', '', '全部 (*.*)', 1 + 4,$MyGui)
                        GUISetState(@SW_ENABLE)  
有一个问题是,打开文件后,gui窗口怎么最小化了?
还有一个问题是,点击按钮后再点击gui如何像我们某些软件那样,对话框会在闪动?
发表于 2011-2-23 23:55:51 | 显示全部楼层
谢谢!!!!!
原来窗口的 disable 和 enable 是这个用途。


用 MsgBox 试了一下才知道 ...
xiehuahere 发表于 2011-2-23 21:44


呵呵!只是为了自我练习,让自己熟记这些常量的值吧!
发表于 2011-2-23 23:56:40 | 显示全部楼层
回复 5# papapa314
#include <WinAPI.au3>
Opt("GUIOnEventMode", 1)
$MyGui = GUICreate('', 400, 300)
GUISetOnEvent(-3, '_GuiEvent')
$Button = GUICtrlCreateButton('按钮', 100, 100, 80, 30)
GUICtrlSetOnEvent(-1, '_GuiEvent')
GUISetState()

While 1
        Sleep(250)
WEnd

Func _GuiEvent()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case 3
                        _WinAPI_EnableWindow($MyGui, False)
                        FileOpenDialog('', '', '全部 (*.*)', 1 + 4, $MyGui)
                        _WinAPI_EnableWindow($MyGui, True)
        EndSwitch
EndFunc   ;==>_GuiEvent
 楼主| 发表于 2011-2-24 09:00:58 | 显示全部楼层
本帖最后由 xiehuahere 于 2011-2-24 09:07 编辑

今天来,也发现了这个问题。选择文件或取消后,原GUI窗口最小化了。
水木子,你修改后的代码也还有这个问题。再帮忙搞搞?

实在不行,我就只有用 @SW_HIDE 和 @SW_SHOW 了,这是下策。
发表于 2011-2-24 11:35:34 | 显示全部楼层
回复 8# xiehuahere

我这里用7楼的代码测试是正常的啊!
XP和WIN7我都测试过,都是正常的!没发现你描述的问题,奇怪了。
发表于 2011-2-24 11:56:32 | 显示全部楼层
回复  xiehuahere

我这里用7楼的代码测试是正常的啊!
XP和WIN7我都测试过,都是正常的!没发现你描述 ...
水木子 发表于 2011-2-24 11:35

参数全错了.

Opt("GUIOnEventMode", 1)
$MyGui = GUICreate('', 400, 300)
GUISetOnEvent(-3, '_GuiEvent')
$Button = GUICtrlCreateButton('按钮', 100, 100, 80, 30)
GUICtrlSetOnEvent(-1, '_GuiEvent')
GUISetState()

While 1
        Sleep(250)
WEnd

Func _GuiEvent()
        Switch @GUI_CtrlId
                Case -3
                        Exit
                Case $Button
                        FileOpenDialog('选择', @WindowsDir, '全部 (*.*)', 1 + 4, '', $MyGui)
        EndSwitch
EndFunc   ;==>_GuiEvent
 楼主| 发表于 2011-2-24 13:43:17 | 显示全部楼层
本帖最后由 xiehuahere 于 2011-2-24 14:02 编辑

这个。。。果真如此。原来只要指定一个父窗口的句柄就OK。
现在好了。


谢谢!
CEO 后面加个guang表示光杆司令? ;-)
谢谢二位超版的帮助。
发表于 2011-2-24 14:11:46 | 显示全部楼层
参数全错了.
ceoguang 发表于 2011-2-24 11:56

怪了!之前我也是用的这个方法,但是依然存在楼主说的这个问题,所以才想到的禁用父窗体。

可能是我参数没有填对吧!学习了!
发表于 2012-10-12 11:23:35 | 显示全部楼层
看看,好东西哦
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-18 15:50 , Processed in 0.081456 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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