![]() | Programming Guide | WideStudio/MWT Index Table of contents |
在退出 EXIT 事件处理过程中通过EXIT触发器显示对话框
关闭窗口,结束应用程序时,通常需要显示是否保存数据等询问的对话框。 此时,通过WSCwindow / WSCmainWindow类的EXIT触发器的事件过程, 可以方便的实现该目的。WSCwindow/WSCmainWindow 类在窗口变为不可见 状态时,会产生EXIT触发器。在应用程序结束前执行相应的事件过程。
首先,将作为应用程序主窗口的WSCwindow 或者WSCmainWindow 类的“exit” 属性设置为True。然后,为该窗口类的EXIT 触发器设置事件过程。
生成具有如下功能的事件过程。
显示询问是否结束的对话框。 当选择“OK”按钮时,执行指定的处理后结束运行。 当选择“NO”按钮时,立即结束运行。 当选择“CANCEL”按钮时,不做任何处理继续运行。 (*----------------------------------------------------------*) (*Function for the event procedure *) (*----------------------------------------------------------*) open Swig open Mwt open Mwtlib (* 重新显示对象的计时器处理过程 *) let timer = ref C_void let target = ref C_void let delayproc obj = if (get_int (!target) <> 0) then ignore(!target -> setVisible ( _True)); () let _ = Callback.register "delayproc" delayproc (* EXIT 事件过程 *) (* 在程序结束时,显示对话框 *) let exit_ep obj = (* do something...*) if get_int (obj -> getVisible()) = get_int _False then let msg = _WSGIappMessageDialog '() in begin (* A *) msg -> setProperty ( "width", 500); msg -> setProperty ( "no", _True); msg -> setProperty ( "defaultPosition", _True); msg -> setProperty ( "labelString", "Exit and save data?\n If you do not want to save and exit,push NO..."); end; (* 显示对话框 *) let ret = msg -> "popup"() in begin (* B *) if (timer = ref C_void) then let parent = obj -> getParentWindow () in begin (* 在第一次运行时,生成计时器 *) timer := new_WSCvtimer ( C_list [parent; C_string "timer"]); let _ = Callback.register "timer" !timer in !timer -> init (); !timer -> setProperty ( "interval", 250 ); !timer -> setProperty ( "cont", _False ); !timer -> addProcedure ( "delay-prop", "delayproc",_WSEV_ACTIVATE ); end; if ( get_int ret = get_int _WS_DIALOG_OK ) then (* 选择“OK”按钮的场合 C *) (* saving some data ... *) exit 0; if ( get_int ret = get_int _WS_DIALOG_NO) then (* 选择“NO”按钮的场合 D *) exit 0; if ( get_int ret = get_int _WS_DIALOG_CANCEL) then begin (* 选择“CANCEL”按钮的场合 E *) target := obj; ignore(!timer -> setProperty ( "running", _True)); (* 启动计时器 *) end; end; () let _ = Callback.register "exit_ep" exit_epA 获得信息对话框实例。B 显示信息对话框。
C、D、E 判断对话框的返回值。
E 继续运行重新显示时,需要使用计时器实现少许延时处理。 这是因为,在窗口系统中要求在重新显示窗口之前产生结束事件。
[确认结束的对话框]
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |