jycel 发表于 2009-3-14 18:56:09

[已解决]GUI上面如何内嵌一个滚动公告

如题,在论坛上看到有一个滚动公告,做得很不错,不知道有没有方法让它内嵌到GUI里面去?我试了多久一直不行!刚学AU3,见着什么都想去试下,每天撑握点!另就是send怎么不能往记事本输入中文字符,输进去要乱码!奇怪

[ 本帖最后由 jycel 于 2009-3-15 12:38 编辑 ]

qin147 发表于 2009-3-14 19:08:05

如何内嵌 ,提问都不清楚 另外 send 是不支持中文的

lxz 发表于 2009-3-14 19:28:34

#include <ACN_String.au3>

SendX("支持中文",0)

小猫妖 发表于 2009-3-14 19:33:19

3L的ACN_String.au3是哪里的啊?

xrbenbeba 发表于 2009-3-14 20:53:56

Run("notepad.exe")
WinWaitActive("无标题 - ")
$Text = "中文 :请多关照" & @CR
$Text &= "繁體 :請多關照 " & @LF
$Text &= "日文 :よろしくお願いします " & @CR
$Text &= "特殊符号: ♂☆⊙①ⅠΘ┆" & @LF
$Text &= "@CRLF 会换行2次" & @CRLF
$Text &= "End"

SendC($Text)

Func SendC($Str, $Flag = 0)
        If $Flag Then
                Local $Clip = ClipGet()
                ClipPut($Str)
                Send('+{ins}')
                ClipPut($Clip)
        Else
                Local $Nul = Chr(0)
                For $i = 1 To StringLen($Str)
                        Send('{ASC ' & StringToBinary(StringMid($Str, $i, 1) & $Nul) & '}')
                Next
        EndIf
EndFunc   ;==>SendC

jycel 发表于 2009-3-14 20:55:09

原帖由 lxz 于 2009-3-14 19:28 发表 http://www.autoitx.com/images/common/back.gif
#include

SendX("支持中文",0)
sendX我在那儿也看到过这函数,但用不了!

jycel 发表于 2009-3-14 20:57:06

原帖由 xrbenbeba 于 2009-3-14 20:53 发表 http://www.autoitx.com/images/common/back.gif
Run("notepad.exe")
WinWaitActive("无标题 - ")
$Text = "中文 :请多关照" & @CR
$Text &= "繁體 :請多關照 " & @LF
$Text &= "日文 :よろしくお願いします " & @CR
$Text &= "特殊符号: ♂☆⊙①ⅠΘ┆"...
学习了!刚试了下!非常好!不知道关于GUI内嵌滚动公告有法实现吗?

[ 本帖最后由 jycel 于 2009-3-14 21:00 编辑 ]

xrbenbeba 发表于 2009-3-14 21:12:06

具体的函数我就不说了 说下思路吧

建立一个标签控件 然后用一个计时器时时更新这个标签
更新的函数设置成每回取第一个字搁到最后或者用AU3的窗体函数移动控件,这样给人的感觉就是滚动的了.

jycel 发表于 2009-3-14 22:15:08

现在还不怎么懂,我去多试下看!原滚公告代码意思也差不多这样!
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;#NoTrayIcon ;隐藏程序在系统托盘上的图标
$title = "";设置需要显示公告的激活窗口的窗口名
$neirong1 = "系统公告:";定义neirong1为公告内容1
$neirong2 = "欢迎来到本网吧!";定义neirong2为公告内容2
WinActivate($title);激活需要显示公告的窗口
$size = WinGetPos($title);获取需要显示公告的窗口大小
;MsgBox(0, "活动窗口状态 (X坐标,Y坐标,宽度,高度):", $size & ",        " & $size & ",        " & $size & ",        " & $size)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("gonggao", $size - 200, 19, 100, 100, $WS_VISIBLE + $WS_POPUP, $WS_EX_TOOLWINDOW)
;根据要显示公告的窗口宽度设置gui的宽度,并用$WS_EX_TOOLWINDOW样式来隐藏GUI界面在任务栏的图标
GUISetBkColor(0x9DB9EB);设置gui背景色
$Label1 = GUICtrlCreateLabel($neirong1 & $neirong2, 5, 5, 580, 15, $SS_CENTERIMAGE);需要移动的控件
GUICtrlSetColor(-1, 0xFF0000);文字颜色
GUISetState(@SW_SHOW);显示gui
WinSetTrans("gonggao", "", 150);定义gui透明度,介于 0 到 255 之间的数值.数值越大则窗口越不透明.
#EndRegion ### END Koda GUI section ###
WinSetOnTop("gonggao", "", 1);设置公告栏为顶层窗口
WinActivate($title);激活需要显示公告的窗口
_ReduceMemory(@AutoItPID);释放内存
$num = 0;这个数控制公告滚动的时间
$b = 1;这个数控制滚动的距离
While $num <= 2500
        If $b = 650 Then $b = 1
        Sleep(15);控制刷新速度
        If WinActive($title) = 1 Then
                ControlMove("gonggao", "", $Label1, 680 - $b, 0)
                $b += 1;检测指定窗口是否激活,如果激活则 b 函数自加
        Else
                WinSetState("gonggao", "", @SW_HIDE);指定窗口未激活时,隐藏公告栏
                WinWaitActive($title);等待指定窗口被激活
                WinSetState("gonggao", "", @SW_SHOW);指定窗口激活后,显示公告栏
        EndIf
        If $b=650 Then _ReduceMemory(@AutoItPID);释放内存
        $num = $num + 1
WEnd

;_ReduceMemory(@AutoItPID)
Func _ReduceMemory($i_PID = -1);内存释放函数
        If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf

        Return $ai_Return
EndFunc   ;==>_ReduceMemory

xrbenbeba 发表于 2009-3-14 22:20:27

和我说的意思差不多

只是他做了一些循环判断

298311657 发表于 2009-3-14 22:46:41

LZ大概是想要这种吧~

#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
;#NoTrayIcon ;隐藏程序在系统托盘上的图标
$title = "gonggao";设置需要显示公告的激活窗口的窗口名
$neirong1 = "系统公告:";定义neirong1为公告内容1
$neirong2 = "欢迎来到本网吧!";定义neirong2为公告内容2
;WinActivate($title);激活需要显示公告的窗口
;$size = WinGetPos($title);获取需要显示公告的窗口大小
;MsgBox(0, "活动窗口状态 (X坐标,Y坐标,宽度,高度):", $size & ",        " & $size & ",        " & $size & ",        " & $size)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate($title, 700, 100, 100, 100)
;根据要显示公告的窗口宽度设置gui的宽度,并用$WS_EX_TOOLWINDOW样式来隐藏GUI界面在任务栏的图标
GUISetBkColor(0x9DB9EB);设置gui背景色
$Label1 = GUICtrlCreateLabel($neirong1 & $neirong2, 5, 5, 580, 15, $SS_CENTERIMAGE);需要移动的控件
GUICtrlSetColor(-1, 0xFF0000);文字颜色
GUISetState(@SW_SHOW);显示gui
;WinSetTrans("gonggao", "", 150);定义gui透明度,介于 0 到 255 之间的数值.数值越大则窗口越不透明.
#EndRegion ### END Koda GUI section ###
;WinSetOnTop("gonggao", "", 1);设置公告栏为顶层窗口
;WinActivate($title);激活需要显示公告的窗口
_ReduceMemory(@AutoItPID);释放内存
$num = 0;这个数控制公告滚动的时间,滚动时间等于$num的指乘以28行的Sleep时间
$b = 1;这个数控制滚动的距离
While $num <= 2500
        $msg=GUIGetMsg()
        If $msg = $GUI_EVENT_CLOSE Then ExitLoop
        If $b = 650 Then $b = 1
        Sleep(15);控制刷新速度
        ;If WinActive($title) = 1 Then
                ControlMove($title, "", $Label1, 680 - $b, 0)
                $b += 1;检测指定窗口是否激活,如果激活则 b 函数自加
        ;Else
        ;        WinSetState("$title", "", @SW_HIDE);指定窗口未激活时,隐藏公告栏
        ;        WinWaitActive($title);等待指定窗口被激活
        ;        WinSetState("gonggao", "", @SW_SHOW);指定窗口激活后,显示公告栏
        ;EndIf
        If $b=650 Then _ReduceMemory(@AutoItPID);释放内存
        $num = $num + 1
WEnd

;_ReduceMemory(@AutoItPID)
Func _ReduceMemory($i_PID = -1);内存释放函数
        If $i_PID <> -1 Then
                Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle)
                DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
        Else
                Local $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
        EndIf

        Return $ai_Return
EndFunc   ;==>_ReduceMemory

jycel 发表于 2009-3-14 23:05:10

是这种,但是我一直没有把内嵌到GUI界面去,下面是GUIonevent模式的例子,那位高手帮我加上去看下
我试了几个小时一直不行,老分离成二个窗口
#include <GUIConstants.au3>
#include <ButtonConstants.au3>

Opt("GUIOneventMode",1)
Dim $Button

$WinMain= GUICreate("测试", 450, 300)            ;创建主窗口
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")             ;注册窗口关闭事件到函数_Exit
;GUICtrlCreateButton ( "文本", 左侧, 上方 [, 宽度 [, 高度 [, 样式 [, 扩展样式]]]] )
$Button= GUICtrlCreateButton("按键1", 0, 0, 110, 49,$BS_FLAT);显示子窗口 1
$Button= GUICtrlCreateButton("按键2", 113, 0, 110, 49,$BS_FLAT);显示子窗口 2
$Button= GUICtrlCreateButton("按键3", 226, 0, 110, 49,$BS_FLAT);显示子窗口 3
$Button= GUICtrlCreateButton("按键4", 339, 0, 110, 49,$BS_FLAT);显示子窗口 4
$Button= GUICtrlCreateButton("按键5", 0, 50, 110, 49,$BS_FLAT);显示子窗口 5
$Button= GUICtrlCreateButton("按键6", 113, 50, 110, 49,$BS_FLAT);显示子窗口 6
$Button= GUICtrlCreateButton("按键7", 226, 50, 110, 49,$BS_FLAT);显示子窗口 7
$Button= GUICtrlCreateButton("按键8", 339, 50, 110, 49,$BS_FLAT);显示子窗口 8
$WinSub1= GUICreate("子窗口", 220, 60)                ;创建子窗口1
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button= GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub2= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button= GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button= GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub3= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub4= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub5= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub6= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub7= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub8= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

For $I = 22 to 0 Step -1
      GUICtrlSetOnEvent($Button[$I],"GUICtrlMsg") ;注册总共的六个按钮点击事件到函数 GUICtrlMsg
                                                    ;请区分 GUISetOnEvent 和 GUICtrlSetOnEvent的区别
Next

GUISwitch($WinMain)                            ;切换当前窗口到主窗口
GUISetState(@SW_SHOW)                        ;显示当前窗口

While 1
      Sleep(1000)
WEnd

Func GUICtrlMsg()
      Switch @GUI_CtrlId;选择事件 ID 或 控件 ID
                Case $GUI_EVENT_CLOSE;如果点下的是$GUI_EVENT_CLOSE(关闭)
                        GUISetState(@SW_HIDE,@GUI_WinHandle);隐藏产生事件的窗口
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub1);显示 子窗口 1
                                Case $Button
                        GUISetState(@SW_HIDE,$WinSub1);隐藏 子窗口 2
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub2);显示 子窗口 2
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub3);显示 子窗口 3
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub4);显示 子窗口 4                                               
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub5);显示 子窗口 5
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub6);显示 子窗口 6
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub7);显示 子窗口 7
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub8);显示 子窗口 8
                Case $Button
                        MsgBox(48,0,"你点了主窗口 1 中的第一个按钮")
                        GUISetState(@SW_HIDE,$WinSub2);隐藏 子窗口 2
                Case $Button
                        MsgBox(48,0,"你点了主窗口 2 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub2);隐藏 子窗口 2
                Case $Button
                        MsgBox(48,0,"你点了主窗口 3 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub3);隐藏 子窗口 3
                Case $Button
                        MsgBox(48,0,"你点了主窗口 4 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub4);隐藏 子窗口 4
                Case $Button
                        MsgBox(48,0,"你点了主窗口 5 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub5);隐藏 子窗口 5
                Case $Button
                        MsgBox(48,0,"你点了主窗口 6 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub6);隐藏 子窗口 6
                Case $Button
                        MsgBox(48,0,"你点了主窗口 7 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub7);隐藏 子窗口 7
                Case $Button
                        MsgBox(48,0,"你点了主窗口 8 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub8);隐藏 子窗口 8                                               
      EndSwitch
EndFunc

Func _Exit()
      Exit
EndFunc

[ 本帖最后由 jycel 于 2009-3-14 23:24 编辑 ]

298311657 发表于 2009-3-14 23:47:31

回复 12# jycel 的帖子

没弄明白你的意思,你是要把公告加到那个窗口上?还是什么?:face (13):

jycel 发表于 2009-3-14 23:57:08

把公告加到GUI窗口上去!

298311657 发表于 2009-3-15 00:18:24

那应该是这样了~希望能帮到你~

#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>


Opt("GUIOneventMode",1)
Dim $Button
$WinMain= GUICreate("测试", 450, 300)            ;创建主窗口
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")             ;注册窗口关闭事件到函数_Exit

$neirong1 = "系统公告:";定义neirong1为公告内容1
$neirong2 = "欢迎来到本网吧!";定义neirong2为公告内容2
$Label1 = GUICtrlCreateLabel($neirong1 & $neirong2, 5, 280, 580, 15, $SS_CENTERIMAGE);定义需要移动的标签
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT);使标签背景透明

;GUICtrlCreateButton ( "文本", 左侧, 上方 [, 宽度 [, 高度 [, 样式 [, 扩展样式]]]] )
$Button= GUICtrlCreateButton("按键1", 0, 0, 110, 49,$BS_FLAT);显示子窗口 1
$Button= GUICtrlCreateButton("按键2", 113, 0, 110, 49,$BS_FLAT);显示子窗口 2
$Button= GUICtrlCreateButton("按键3", 226, 0, 110, 49,$BS_FLAT);显示子窗口 3
$Button= GUICtrlCreateButton("按键4", 339, 0, 110, 49,$BS_FLAT);显示子窗口 4
$Button= GUICtrlCreateButton("按键5", 0, 50, 110, 49,$BS_FLAT);显示子窗口 5
$Button= GUICtrlCreateButton("按键6", 113, 50, 110, 49,$BS_FLAT);显示子窗口 6
$Button= GUICtrlCreateButton("按键7", 226, 50, 110, 49,$BS_FLAT);显示子窗口 7
$Button= GUICtrlCreateButton("按键8", 339, 50, 110, 49,$BS_FLAT);显示子窗口 8
$WinSub1= GUICreate("子窗口", 220, 60)                ;创建子窗口1
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button= GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub2= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button= GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button= GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub3= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub4= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub5= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub6= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub7= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

$WinSub8= GUICreate("子窗口", 220, 60)                ;创建子窗口2
GUISetOnEvent($GUI_EVENT_CLOSE, "GUICtrlMsg")         ;注册窗口关闭事件到函数GUICtrlMsg
$Button = GUICtrlCreateButton("确认", 0, 0, 100, 50,$BS_DEFPUSHBUTTON)
$Button = GUICtrlCreateButton("取消", 110, 0, 100, 50,$BS_DEFPUSHBUTTON);创建子窗口中按钮二

For $I = 22 to 0 Step -1
      GUICtrlSetOnEvent($Button[$I],"GUICtrlMsg") ;注册总共的六个按钮点击事件到函数 GUICtrlMsg
                                                    ;请区分 GUISetOnEvent 和 GUICtrlSetOnEvent的区别
Next

GUISwitch($WinMain)                            ;切换当前窗口到主窗口
GUISetState(@SW_SHOW)                        ;显示当前窗口

$b = 1
While 1
        If $b = 630 Then $b = 1
        Sleep(20)
        ControlMove($WinMain, "", $Label1, 450 - $b, 280)
        $b += 1
WEnd


Func GUICtrlMsg()
      Switch @GUI_CtrlId;选择事件 ID 或 控件 ID
                Case $GUI_EVENT_CLOSE;如果点下的是$GUI_EVENT_CLOSE(关闭)
                        GUISetState(@SW_HIDE,@GUI_WinHandle);隐藏产生事件的窗口
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub1);显示 子窗口 1
                                Case $Button
                        GUISetState(@SW_HIDE,$WinSub1);隐藏 子窗口 2
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub2);显示 子窗口 2
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub3);显示 子窗口 3
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub4);显示 子窗口 4                                               
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub5);显示 子窗口 5
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub6);显示 子窗口 6
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub7);显示 子窗口 7
                Case $Button
                        GUISetState(@SW_SHOW,$WinSub8);显示 子窗口 8
                Case $Button
                        MsgBox(48,0,"你点了主窗口 1 中的第一个按钮")
                        GUISetState(@SW_HIDE,$WinSub2);隐藏 子窗口 2
                Case $Button
                        MsgBox(48,0,"你点了主窗口 2 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub2);隐藏 子窗口 2
                Case $Button
                        MsgBox(48,0,"你点了主窗口 3 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub3);隐藏 子窗口 3
                Case $Button
                        MsgBox(48,0,"你点了主窗口 4 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub4);隐藏 子窗口 4
                Case $Button
                        MsgBox(48,0,"你点了主窗口 5 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub5);隐藏 子窗口 5
                Case $Button
                        MsgBox(48,0,"你点了主窗口 6 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub6);隐藏 子窗口 6
                Case $Button
                        MsgBox(48,0,"你点了主窗口 7 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub7);隐藏 子窗口 7
                Case $Button
                        MsgBox(48,0,"你点了主窗口 8 中的第一个按钮")
                Case $Button
                        GUISetState(@SW_HIDE,$WinSub8);隐藏 子窗口 8                                               
      EndSwitch
EndFunc

Func _Exit()
      Exit
EndFunc
页: [1] 2
查看完整版本: [已解决]GUI上面如何内嵌一个滚动公告