找回密码
 加入
搜索
查看: 3547|回复: 3

[GUI管理] 【已解决】奇怪的问题:GUIRegisterMsg + GUICtrlSetStyle = bug ?

[复制链接]
发表于 2010-1-19 23:15:58 | 显示全部楼层 |阅读模式
本帖最后由 ccxw1983 于 2010-2-7 11:42 编辑

使用
GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
的过程中发现一个问题,当执行了
GUICtrlSetStyle($Label, $SS_CENTER)
后,注册的消息不再有用了
代码如下,请高手指点
;GUIRegisterMsg + GUICtrlSetStyle = bug ?

#include <Date.au3>
#include <Constants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1); GUI OnEvent

Global Const $STN_DBLCLK = 1

Local $win_main = GUICreate("", 450, 30, 450, 30)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui_win_tool")
Local $Label = GUICtrlCreateLabel("", 0, 0, 450, 30)
;GUICtrlSetOnEvent($Label, "gui_win_tool")

GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
GUISetState(@SW_SHOW)

Local $begin_ticks = _Date_Time_GetTickCount()
Local $waitticks = 9000 / 1
While 1
        If _Date_Time_GetTickCount() - $begin_ticks > $waitticks Then
                GUICtrlSetStyle($Label, $SS_CENTER)

                GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
                GUICtrlSetData($Label, "double click me can not show TrayTip now! ")
        Else
                GUICtrlSetData($Label, "double click me to show TrayTip. " & @CRLF _
                                 & "after " & Int(($waitticks - _Date_Time_GetTickCount() + $begin_ticks) / 1000) _
                                 & " seconds, this will not work,is this a bug for GUIRegisterMsg?")
        EndIf

        Sleep(100)
WEnd

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
        ;ConsoleWrite("$hWnd=" & $hWnd & @CRLF)
        Local $nNotifyCode = BitShift($wParam, 16)
        Local $nID = BitAND($wParam, 0xFFFF)
        Local $hCtrl = $lParam
        Switch $nID
                Case $Label
                        Switch $nNotifyCode
                                Case $STN_DBLCLK
                                        TrayTip("", "dbclick at " & @HOUR & ":" & @MIN & ":" & @SEC, 1, 1)
                        EndSwitch
        EndSwitch

        Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND


Func gui_win_tool()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                        ;Case $Label
                        ;        TrayTip("", " some click at " & @HOUR & ":" & @MIN & ":" & @SEC, 1, 1)
        EndSwitch
EndFunc   ;==>gui_win_tool
发表于 2010-1-19 23:26:53 | 显示全部楼层
本帖最后由 llztt 于 2010-1-19 23:32 编辑
;GUIRegisterMsg + GUICtrlSetStyle = bug ?

#include <Date.au3>
#include <Constants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

Opt("GUIOnEventMode", 1); GUI OnEvent

Global Const $STN_DBLCLK = 1

Local $win_main = GUICreate("", 450, 30, 450, 30)
GUISetOnEvent($GUI_EVENT_CLOSE, "gui_win_tool")
Local $Label = GUICtrlCreateLabel("fsadfafsafsafasfasd", 0, 0, 450, 30,$SS_CENTER)

;GUICtrlSetOnEvent($Label, "gui_win_tool")

GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
GUISetState(@SW_SHOW)

Local $begin_ticks = _Date_Time_GetTickCount()
Local $waitticks = 9000 / 1
While 1
        Sleep(100)
WEnd

Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
        ;ConsoleWrite("$hWnd=" & $hWnd & @CRLF)
        Local $nNotifyCode = BitShift($wParam, 16)
        Local $nID = BitAND($wParam, 0xFFFF)
        Local $hCtrl = $lParam
        Switch $nID
                Case $Label
                        Switch $nNotifyCode
                                                        Case $STN_DBLCLK
                                                                ConsoleWrite("dbclick at " & @HOUR & ":" & @MIN & ":" & @SEC)
                                                                TrayTip("", "dbclick at " & @HOUR & ":" & @MIN & ":" & @SEC, 1, 1)
                        EndSwitch
        EndSwitch

        Return $GUI_RUNDEFMSG
EndFunc   ;==>MY_WM_COMMAND


Func gui_win_tool()
        Switch @GUI_CtrlId
                Case $GUI_EVENT_CLOSE
                        Exit
                        ;Case $Label
                        ;        TrayTip("", " some click at " & @HOUR & ":" & @MIN & ":" & @SEC, 1, 1)
        EndSwitch
EndFunc   ;==>gui_win_tool
确实有问题,改成这样反而可行,你再测试下。。
另外你的TRAYTIP我显示不出来,我加了CONSOLEWRITE
 楼主| 发表于 2010-1-19 23:52:22 | 显示全部楼层
如果不执行这个没事,一旦执行了就有问题了的
GUICtrlSetStyle($Label, $SS_CENTER)
 楼主| 发表于 2010-1-20 09:42:08 | 显示全部楼层
问题已经解决,http://www.autoitscript.com/foru ... 95&#entry764895


Replace it with this: GUICtrlSetStyle($Label, BitOr($SS_NOTIFY, $SS_CENTER)) and all will be well.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 19:52 , Processed in 0.078188 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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