问个绘窗口,只出来一个空窗口的问题
本帖最后由 happytc 于 2011-5-3 08:12 编辑下面的代码,利用附件的IconDock.au3文件,当Dock栏出来后,右键点击,想出来DockConfig()函数绘的窗口,结果出来个空窗口,比较奇怪的事,当把该函数中的下面语句去掉注释后,一切就正常了
;MsgBox(0,0,"0k")
现在我没有想出问题出在那里了
#include <GuiConstantsEx.au3>
#include <GuiConstants.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>
#include "IconDock.au3"
HotKeySet("{ESC}", "_Exit")
Global $iIconSizeMin = 48
Global $iIconSizeMax = 96
Global $aIcon =
$aIcon = @WindowsDir & "\explorer.exe"
$aIcon = @SystemDir & "\taskmgr.exe"
$aIcon = @SystemDir & "\write.exe"
$aIcon = @SystemDir & "\notepad.exe"
$aIcon = @SystemDir & "\osk.exe"
$aIcon = @SystemDir & "\charmap.exe"
$aIcon = @SystemDir & "\mspaint.exe"
Global $hIconDock = _IconDock_Create(0, @DesktopHeight - $iIconSizeMax - $iIconSizeMin, @DesktopWidth, $iIconSizeMax + $iIconSizeMin, BitOR($IconDock_Align_Horizontal, $IconDock_Center), $IconDock_Up, $iIconSizeMin, $iIconSizeMax, True)
_IconDock_BeginUpdate($hIconDock)
For $i = 1 To $aIcon
_IconDock_IconAddFile($hIconDock, $aIcon[$i], 0, "_EventFunction", $IconDock_RBUTTONDOWN)
Next
_IconDock_EndUpdate($hIconDock)
While 1
Sleep(100)
WEnd
Func _EventFunction($hID, $iIconIndex, $iEventMsg)
Switch $hID
Case $hIconDock
Switch $iEventMsg
Case $IconDock_RBUTTONDOWN
Local $moved = DockMoveBar($hIconDock)
If $moved = False Then ; If $moved = true the bar was moved - don't open options.
DockConfig()
EndIf
EndSwitch
EndSwitch
EndFunc
Func DockConfig()
Local $hwdDock, $HRadio, $VRadio, $OKButton, $CancelButton, $msg
$hwdDock = GUICreate("Dock Config", 280, 150)
GUICtrlCreateLabel("IconSizeMin:", 10, 13, 80, 20)
GUICtrlCreateLabel("IconSizeMax:", 10, 43, 80, 20)
GUICtrlCreateLabel("Orientation:", 10, 83, 80, 20)
$HRadio = GUICtrlCreateRadio("Horizontal", 100, 80, 100, 20)
$VRadio = GUICtrlCreateRadio("Vertical", 200, 80, 100, 20)
$OKButton = GUICtrlCreateButton("OK", 50, 120, 50, 20)
$CancelButton = GUICtrlCreateButton("Cancel", 160, 120, 50, 20)
GUISetState()
;MsgBox(0,0,"0k")
While True
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $CancelButton
ExitLoop
Case $OKButton
MsgBox(0,"pressed", "Pressed OK Button")
ExitLoop
EndSwitch
Sleep(20)
WEnd
GUIDelete($hwdDock)
EndFunc
Func DockMoveBar($hwdGuiBar)
Local $PosDiff, $WinPos, $WinPos2, $MousePos, $dll, $moved
$dll = DllOpen("user32.dll")
While 1
$MousePos = MouseGetPos()
$WinPos = WinGetPos($hwdGuiBar)
$PosDiff = $WinPos - $MousePos
$PosDiff = $WinPos - $MousePos
While _IsPressed("02", $dll)
$MousePos = MouseGetPos()
WinMove($hwdGuiBar, "", $MousePos + $PosDiff, $MousePos + $PosDiff)
WEnd
Sleep(10)
ExitLoop
WEnd
$WinPos2 = WinGetPos($hwdGuiBar, "")
If ($WinPos < $WinPos2 - 3) Or ($WinPos < $WinPos2 - 3) Or ($WinPos > $WinPos2 + 3) Or ($WinPos > $WinPos2 + 3) Then
$moved = True ; If the window was moved, don't run program on return.
Else
$moved = False
EndIf
Sleep(10)
Return $moved
EndFunc
Func _Exit()
_IconDock_Destroy($hIconDock)
Exit
EndFunc
我看不出楼主的代码要干什么 只是为了说明这个问题,临时想出来的代码,作用就是显示出标题所说的问题。 这个问题,没有知道为什么吗?
卡在这里了,实在不知道,怎么msgbox()一下,就没有问题了。太奇怪了 出现那个光溜溜的窗口,点x掉后,一会au3就自动退出了,出现下面的信息。本来就是x掉这个窗口,也不应该退回的
!>08:10:05 AutoIT3.exe 完成::1073807364 ---- 这一行代表啥意思?
+>08:10:07 ACNWrapper 完成..
>退出代码: 1073807364 运行时间: 14.160 秒 快被这个问题搞疯了。
连是执行到脚本那一行而卡死都无法找到 又测试了下,脚本一直在下面这个循环里运行,既然执行到这里了,为什在这个循环之前定义的窗口里的Button之类的不出来呢?
While True
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE, $CancelButton
ExitLoop
Case $OKButton
MsgBox(0, "pressed", "Pressed OK Button")
ExitLoop
EndSwitch
Sleep(20)
WEnd 看来这个问题,没有人知道呀
想问下,绘制窗口的控件的机制是啥?为什么脚本执行过了,但就是不出来窗口里本来有的按纽之类的?若把这个绘窗口的函数单独拿出来,又完全没有问题,百思不得其解,怎么加看起来毫无相关的Msgbox()语句,就正常了,并且这个语句无论放在函数内的那里都可以。
就是不知道原因,大家有没有什么建议,可以不显示对话框msgbox,我现在只想能做就可以了,不了解原因
有没有什么曲线方法? 哎,还是没有找到这个事情的原因
不过,我把它改成事件机制,就没有问题了,
怎么循环里用消息机制,就会出这样奇怪的问题呢? 不过,我一点都不喜欢用事件机制来实现绘制的窗口响应,因为GUICtrlSetOnEvent( 控件ID, "函数名" )里的自定义函数不能带参数,这让你不得不定义全局变量,我很是不喜欢用全局变量,因为这样不利于封装和转到别的地方用
页:
[1]