找回密码
 加入
搜索
查看: 4158|回复: 10

[GUI管理] 事件模式下,为什么从子窗口退出到主窗口时有一小会闪烁?[已初步解决]

  [复制链接]
发表于 2012-3-19 00:03:52 | 显示全部楼层 |阅读模式
本帖最后由 shuren88 于 2012-3-19 10:05 编辑

OK从子窗口退出到主窗口时有一小会闪烁-初步的解决办法OK

初步的解决办法OK:先启用主窗口,再删除子窗口,这样主窗口便不再会闪烁。只是子窗口删除稍有延迟,不过无大碍。
        GUISetState(@SW_ENABLE, $MainForm1)
        GuiDelete(@GUI_WINHANDLE)
        GUICtrlSetState($MainListView1, $GUI_FOCUS)                        ;设置焦点

原来的惯性思维:先删除子窗口,再启用主窗口,这样主窗口便会明显闪烁。
        GuiDelete(@GUI_WINHANDLE)
        GUISetState(@SW_ENABLE, $MainForm1)
        GUICtrlSetState($MainListView1, $GUI_FOCUS)                        ;设置焦点
-----------------------------------------------------------------------------------------------

在这里有个帖子:为什么从子窗口退出到主窗口时有一小会闪烁[已解决]
但不知道是怎么解决的?事件模式下,我现在也遇到这个问题,搜索了很久也没有解决。

本帖最后由 udbghdto 于 2011-8-9 19:33 编辑
http://www.autoitx.com/forum.php ... =%D7%D3%B4%B0%BF%DA
为什么从子窗口退出到主窗口时有一小会闪烁。。在论坛上有人说要用到钩子可以解决。。问题就来了什么是钩子呀。哪位大大说说呀。。
发表于 2012-3-19 00:06:07 | 显示全部楼层
把相关建立及退出的代码放上来吧, 谁知道你如何'退出'?
有代码有真相, 包你第一时间解决问题!
 楼主| 发表于 2012-3-19 00:14:55 | 显示全部楼层
单击“关于”,再单击“确定”退出子窗口时,主窗口会闪烁。
#Region ;**** 参数创建于 AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\TDDOWNLOAD\953\Anthropomorphic 047.ico
#AutoIt3Wrapper_UseAnsi=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;#AutoIt3Wrapper_PassPhrase=820107

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <GuiStatusbar.au3>
#include <array.au3>
#include <process.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>


Opt("TrayMenuMode", 1)

$title = "软件自动安装管理器 V1.0"
$build = "最后更新:2008-01-21"
Opt("GUIOnEventMode", 1)

#Region ### START Koda GUI section ### Form=
$AForm1 = GUICreate($title, 640, 430, 193, 125)
$Pic1 = GUICtrlCreatePic(@TempDir & "\logo.jpg", 3, 3, 634, 100, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetState(-1, $GUI_DISABLE)
$Label1 = GUICtrlCreateLabel("请选项择您要安装的软件:", 10, 115, 139, 17)
$ListView1 = GUICtrlCreateListView("软件名称|说明|状态", 8, 130, 622, 193)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_CHECKBOXES, $LVS_EX_CHECKBOXES)

_GUICtrlListView_SetColumnWidth($ListView1, 0, 150)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 350)
_GUICtrlListView_SetColumnWidth($ListView1, 2, 118)
;$Edit1 = GUICtrlCreateEdit("", 8, 352, 617, 49, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_VSCROLL))
;GUICtrlSetData(-1, "Edit1")
$Label2 = GUICtrlCreateLabel("欢迎访问:http://www.autoitx.com", 9, 331, 620, 20, BitOR(0x0300, $ss_sunken))
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0x0000FF)
$Button1 = GUICtrlCreateButton("关于(&A)", 176, 368, 81, 28)

$Button4 = GUICtrlCreateButton("退出(&X)", 544, 368, 81, 28)
GUICtrlSetOnEvent($Button1, "_about")

GUICtrlSetOnEvent($Button4, "_exit")
$Label3 = GUICtrlCreateLabel("By Pcbar   (C) 2008.01", 12, 376, 141, 20)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")

Local $a_PartsRightEdge[3] = [400, 550, -1]
Local $a_PartsText[3] = [$title, @TAB & @YEAR & "年" & @MON & "月" & @MDAY & "日", @TAB & @HOUR & ":" & @MIN & ":" & @SEC]
$StatusBar1 = _GUICtrlStatusBar_Create($AForm1, $a_PartsRightEdge, $a_PartsText)
#EndRegion ### END Koda GUI section ###
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;关于窗口开始
#Region ### START Koda GUI section ### Form=D:\autoit\install\about.kxf
$Form2 = GUICreate("关于", 298, 155, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), Default, $AForm1)
GUISetOnEvent($GUI_EVENT_CLOSE, "form2_exit", $Form2)
$Label2_1 = GUICtrlCreateLabel($title, 16, 24, 188, 20)
GUICtrlSetFont(-1, 12, 400, 0, "黑体")
$Label2_2 = GUICtrlCreateLabel($build, 16, 56, 130, 17)
$Button2_1 = GUICtrlCreateLabel("", 40, 101, 3, 43, -1, $WS_EX_STATICEDGE)
$Label2_3 = GUICtrlCreateLabel("作者:pcbar", 48, 104, 67, 17)
$Label2_4 = GUICtrlCreateLabel("EMAIL:pcbar@163..com", 48, 128, 130, 17)
$Button2_2 = GUICtrlCreateButton("确定", 215, 114, 65, 28, 0)
GUICtrlSetOnEvent(-1, "form2_exit")
#EndRegion ### END Koda GUI section ###
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;关于窗口结束
GUISwitch($AForm1)
GUISetState(@SW_SHOW)

While 1
        Sleep(250)
        _GUICtrlStatusBar_SetText($StatusBar1, @TAB & @HOUR & ":" & @MIN & ":" & @SEC, 2)

WEnd

Func _exit()
        FileDelete(@TempDir & "\logo.jpg")
        Exit
EndFunc   ;==>_exit
Func form2_exit()
        
        GUISetState(@SW_HIDE, $Form2)
        GUISwitch($AForm1)
        GUISetState(@SW_ENABLE, $AForm1)
        WinActivate($AForm1)
EndFunc   ;==>form2_exit

Func _about()
        
        GUISwitch($Form2)
        GUISetState(@SW_SHOW, $Form2)
        GUISetState(@SW_DISABLE,$AForm1)
        
EndFunc   ;==>_about
发表于 2012-3-19 00:25:24 | 显示全部楼层
大概改了几个地方, 应该达到你的要求了吧...
试试看?
#Region ;**** 参数创建于 AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\TDDOWNLOAD\953\Anthropomorphic 047.ico
#AutoIt3Wrapper_UseAnsi=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
;#AutoIt3Wrapper_PassPhrase=820107

#include <GUIConstants.au3>
#include <GuiListView.au3>
#include <GuiStatusbar.au3>
#include <array.au3>
#include <process.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>


Opt("TrayMenuMode", 1)

$title = "软件自动安装管理器 V1.0"
$build = "最后更新:2008-01-21"
Opt("GUIOnEventMode", 1)

#Region ### START Koda GUI section ### Form=
$AForm1 = GUICreate($title, 640, 430, 193, 125)
$Pic1 = GUICtrlCreatePic(@TempDir & "\logo.jpg", 3, 3, 634, 100, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
GUICtrlSetState(-1, $GUI_DISABLE)
$Label1 = GUICtrlCreateLabel("请选项择您要安装的软件:", 10, 115, 139, 17)
$ListView1 = GUICtrlCreateListView("软件名称|说明|状态", 8, 130, 622, 193)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_GRIDLINES, $LVS_EX_GRIDLINES)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_FULLROWSELECT, $LVS_EX_FULLROWSELECT)
GUICtrlSendMsg($ListView1, $LVM_SETEXTENDEDLISTVIEWSTYLE, $LVS_EX_CHECKBOXES, $LVS_EX_CHECKBOXES)

_GUICtrlListView_SetColumnWidth($ListView1, 0, 150)
_GUICtrlListView_SetColumnWidth($ListView1, 1, 350)
_GUICtrlListView_SetColumnWidth($ListView1, 2, 118)
;$Edit1 = GUICtrlCreateEdit("", 8, 352, 617, 49, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_WANTRETURN, $WS_VSCROLL))
;GUICtrlSetData(-1, "Edit1")
$Label2 = GUICtrlCreateLabel("欢迎访问:http://www.autoitx.com", 9, 331, 620, 20, BitOR(0x0300, $ss_sunken))
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0x0000FF)
$Button1 = GUICtrlCreateButton("关于(&A)", 176, 368, 81, 28)

$Button4 = GUICtrlCreateButton("退出(&X)", 544, 368, 81, 28)
GUICtrlSetOnEvent($Button1, "_about")

GUICtrlSetOnEvent($Button4, "_exit")
$Label3 = GUICtrlCreateLabel("By Pcbar   (C) 2008.01", 12, 376, 141, 20)
GUICtrlSetFont(-1, 10, 800, 0, "Arial")
GUICtrlSetState(-1, $GUI_DISABLE)
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")

Local $a_PartsRightEdge[3] = [400, 550, -1]
Local $a_PartsText[3] = [$title, @TAB & @YEAR & "年" & @MON & "月" & @MDAY & "日", @TAB & @HOUR & ":" & @MIN & ":" & @SEC]
$StatusBar1 = _GUICtrlStatusBar_Create($AForm1, $a_PartsRightEdge, $a_PartsText)
#EndRegion ### END Koda GUI section ###
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;关于窗口开始
#Region ### START Koda GUI section ### Form=D:\autoit\install\about.kxf
$Form2 = GUICreate("关于", 298, 155, -1, -1, BitOR($WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_BORDER, $WS_CLIPSIBLINGS), Default, $AForm1)
GUISetOnEvent($GUI_EVENT_CLOSE, "form2_exit", $Form2)
$Label2_1 = GUICtrlCreateLabel($title, 16, 24, 188, 20)
GUICtrlSetFont(-1, 12, 400, 0, "黑体")
$Label2_2 = GUICtrlCreateLabel($build, 16, 56, 130, 17)
$Button2_1 = GUICtrlCreateLabel("", 40, 101, 3, 43, -1, $WS_EX_STATICEDGE)
$Label2_3 = GUICtrlCreateLabel("作者:pcbar", 48, 104, 67, 17)
$Label2_4 = GUICtrlCreateLabel("EMAIL:pcbar@163..com", 48, 128, 130, 17)
$Button2_2 = GUICtrlCreateButton("确定", 215, 114, 65, 28, 0)
GUICtrlSetOnEvent(-1, "form2_exit")
#EndRegion ### END Koda GUI section ###
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;关于窗口结束

GUISetState(@SW_SHOW, $AForm1)

While 1
        Sleep(250)
        _GUICtrlStatusBar_SetText($StatusBar1, @TAB & @HOUR & ":" & @MIN & ":" & @SEC, 2)

WEnd

Func _exit()
        FileDelete(@TempDir & "\logo.jpg")
        Exit
EndFunc   ;==>_exit
Func form2_exit()
        
        GUISetState(@SW_HIDE, $Form2)
        GUISetState(@SW_ENABLE, $AForm1)
        GUISetState(@SW_RESTORE, $AForm1)
EndFunc   ;==>form2_exit

Func _about()
        GUISetState(@SW_SHOW, $Form2)
        GUISetState(@SW_DISABLE,$AForm1)
        
EndFunc   ;==>_about
发表于 2012-3-19 01:00:34 | 显示全部楼层
Func form2_exit()
        GUISetState(@SW_ENABLE, $AForm1)
        GUISetState(@SW_HIDE, $Form2)
        GUISwitch($AForm1)
EndFunc   ;==>form2_exit
发表于 2012-3-19 01:04:40 | 显示全部楼层
回复 4# user3000
楼主好像都没说具体要什么,这么两大段似乎没什么必要,对不对另说
发表于 2012-3-19 01:05:30 | 显示全部楼层
$AForm1 生成后即可 GUISetState()
所有的 GUISwitch() 都是多余的
 楼主| 发表于 2012-3-19 09:51:04 | 显示全部楼层
非常感谢各位老大,认真研究
 楼主| 发表于 2012-3-19 10:04:31 | 显示全部楼层
OK从子窗口退出到主窗口时有一小会闪烁-初步的解决办法OK

初步的解决办法OK:先启用主窗口,再删除子窗口,这样主窗口便不再会闪烁。只是子窗口删除稍有延迟,不过无大碍。
        GUISetState(@SW_ENABLE, $MainForm1)
        GuiDelete(@GUI_WINHANDLE)
        GUICtrlSetState($MainListView1, $GUI_FOCUS)                        ;设置焦点

原来的惯性思维:先删除子窗口,再启用主窗口,这样主窗口便会明显闪烁。
        GuiDelete(@GUI_WINHANDLE)
        GUISetState(@SW_ENABLE, $MainForm1)
        GUICtrlSetState($MainListView1, $GUI_FOCUS)                        ;设置焦点
发表于 2012-3-19 20:43:23 | 显示全部楼层
收藏了,感谢分享
发表于 2012-3-19 20:43:26 | 显示全部楼层
收藏了,感谢分享
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-19 10:17 , Processed in 0.079068 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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