WideStudio Programming Guide

| WideStudio Programming Guide | WideStudio Index Table of contents

> ## 在退出 EXIT 事件处理过程中通过EXIT触发器显示对话框

> 关闭窗口，结束应用程序时，通常需要显示是否保存数据等询问的对话框。 此时，通过WSCwindow / WSCmainWindow类的EXIT触发器的事件过程， 可以方便的实现该目的。WSCwindow/WSCmainWindow 类在窗口变为不可见 状态时，会产生EXIT触发器。在应用程序结束前执行相应的事件过程。
> 首先，将作为应用程序主窗口的WSCwindow 或者WSCmainWindow 类的“exit” 属性设置为True。然后，为该窗口类的EXIT 触发器设置事件过程。
> 生成具有如下功能的事件过程。
> - 显示询问是否结束的对话框。
> - 当选择“OK”按钮时，执行指定的处理后结束运行。
> - 当选择“NO”按钮时，立即结束运行。
> - 当选择“CANCEL”按钮时，不做任何处理继续运行。

>     #----------------------------------------------------------
>     #事件过程对应的处理函数
>     #----------------------------------------------------------
>     # 重新显示对象的计时器处理过程
>     use mpfc;

>     $timer = 0;
>     $target = 0;
>     sub delayproc {
>       my ($object) = @_;

>       if ($target != 0){
>         $target->setVisible($mpfc::True);
>       }
>       return;
>     }

>     # EXIT 事件过程
>     # 在程序结束时，显示对话框
>     sub exit_ep {
>       my ($object) = @_;
>       if ($object->getVisible() != $mpfc::False){
>         return;
>       }
>       $msg = mpfc::WSGIappMessageDialog(); #A
>       $msg->setProperty("width",500);
>       $msg->setProperty("no",$mpfc::True);
>       $msg->setProperty("defaultPosition",$mpfc::True);
>       $msg->setProperty("labelString",
>         "Exit and save data?\n If you do not want to save and exit,push NO...");

>       # 显示对话框
>       $ret = $msg->popup(); #B

>       # 在第一次运行时，生成计时器
>       if ($timer == 0){
>         $timer = new mpfc::WSCvtimer($object,"objname");
>         $timer->init();
>         $timer->setProperty("interval",250);
>         $timer->setProperty("cont",$mpfc::False);
>         $timer->addProcedure("delay-popup","delayproc",$mpfc::WSEV_ACTIVATE);
>       }
>       if ($ret == $mpfc::WS_DIALOG_OK){         # 选择“OK”按钮的场合 C
>         # saving some data ...
>         exit(0);
>       }elsif ($ret == $mpfc::WS_DIALOG_NO){       # 选择“NO”按钮的场合 D
>         exit(0);
>       }elsif ($ret == $mpfc::WS_DIALOG_CANCEL){   # 选择“CANCEL”按钮的场合 E
>         $target = $object;
>         $timer->setProperty("running",$mpfc::True);   # 启动计时器
>       }
>       return;
>     }
>     1;

> A 获得信息对话框实例。B 显示信息对话框。
> C、D、E 判断对话框的返回值。
> E 继续运行重新显示时，需要使用计时器实现少许延时处理。 这是因为，在窗口系统中要求在重新显示窗口之前产生结束事件。

> [确认结束的对话框]

Document Release 3.70 for WideStudio ver 3.70, Feb 2004

WideStudio documents index | Table of contents

Copyright(C) T. Hirabayashi, 2000-2004 | Last modified: Feb 25, 2004