主页:Code-By.Org
转载请注明出处
Win32::GUI::Tutorial Part 4 - 高级特性
计时器
- 许多应用类型需要在固定的时间间隔做指定的操作。一个常见的应用实例就是时钟,但也可能是其他应用:
* 文件监视器,监控文件的变化,每经过一定的时间间隔就扫描一次,如果有变更就显示。
* 每秒更新显示信息的监视器
* 网络 ping 工具,每隔指定的时间向服务器发出 ping,来判断服务器是否正常运行。
向应用程序添加计时器非常简单,对需要使用计时器的窗体调用 AddTimer() 方法即可。当经过指定
间隔的时间,自动触发 Timer 事件。
示例:
注意:$t1 = $main->AddTimer('T1', 1000); sub T1_Timer { print "Timer went off!\n"; }- * AddTimer() 方法接受两个参数,计时器的名称,以及时间间隔(毫秒级)。与其他函数不同,不采用 option => value 的方式传递参数。
* 计时器将反复触发 Timer 事件。使用 $timer->Interval(0) 或 $timer->Kill() 以关闭计时器。
* 通过 $timer->Interval(n) 来修改计时器的时间间隔。将时间间隔设为 0 等同于 $timer->Kill()。
- * AddTimer() 方法接受两个参数,计时器的名称,以及时间间隔(毫秒级)。与其他函数不同,不采用 option => value 的方式传递参数。
- 使用以下方式添加状态栏:
支持通用选项,但通常用不到它们。$sb = $main->AddStatusBar();
唯一需要注意的是状态栏的尺寸并不随着窗体大小的改变而改变,你需要在窗体 Resize 事件内做相应的处理:
也可以通过 Text() 方法为状态栏添加文本sub Main_Resize { $sb->Move(0, $main->ScaleHeight - $sb->Height); $sb->Resize($main->ScaleWidth, $sb->Height); }
写入空白字符串以清除状态栏内容。$sb->Text("This appears in the status bar");
- 许多实用程序都带有“系统托盘”图标 ———— 在桌面任务栏右下角显示。Win32::GUI 中,通过 AddNotifyIcon()
方法为程序添加系统托盘图标,其包含三个参数 - 名称、提示内容 以及 图标对象。创建图标对象:
$icon = Win32::GUI::Icon->new("name.ico") 。 系统托盘图标支持鼠标单击事件和右击事件。
常见的情景是当窗体最小化/隐藏时显示托盘图标,通过单击图标再次显示窗体。
示例代码:
一些要点:use Win32::GUI(); my $main = Win32::GUI::Window->new( -name => 'Main', -text => 'Perl', -width => 200, -height => 200 ); my $icon = new Win32::GUI::Icon('GUIPERL.ICO'); my $ni = $main->AddNotifyIcon( -name => "NI", -icon => $icon, -tip => "Hello" ); Win32::GUI::Dialog(); sub Main_Terminate { return -1; } sub Main_Minimize { $main->Disable(); $main->Hide(); return 1; } sub NI_Click { $main->Enable(); $main->Show(); return 1; }- * 要从任务栏中移除程序标签,必须禁用(disable)窗体并隐藏。当需要再次显示时,重新启用(enable)即可
* 如果想要移除托盘图标,可通过以下方法("NI"是托盘图标对象的名称):
$main->NI->Remove();
在接下来的教程中,将介绍更复杂的控件 - list view 和 tree view。
- * 要从任务栏中移除程序标签,必须禁用(disable)窗体并隐藏。当需要再次显示时,重新启用(enable)即可
- 要点中所指的程序标签,指的是任务栏中多个不同程序的标签,而非托盘图标。