![]() | Programming Guide | WideStudio/MWT Index Table of contents |
在退出 EXIT 事件处理过程中通过EXIT触发器显示对话框
关闭窗口,结束应用程序时,通常需要显示是否保存数据等询问的对话框。 此时,通过WSCwindow / WSCmainWindow类的EXIT触发器的事件过程, 可以方便的实现该目的。WSCwindow/WSCmainWindow 类在窗口变为不可见 状态时,会产生EXIT触发器。在应用程序结束前执行相应的事件过程。
首先,将作为应用程序主窗口的WSCwindow 或者WSCmainWindow 类的“exit” 属性设置为True。然后,为该窗口类的EXIT 触发器设置事件过程。
生成具有如下功能的事件过程。
显示询问是否结束的对话框。 当选择“OK”按钮时,执行指定的处理后结束运行。 当选择“NO”按钮时,立即结束运行。 当选择“CANCEL”按钮时,不做任何处理继续运行。 #---------------------------------------------------------- #事件过程对应的处理函数 #---------------------------------------------------------- # 重新显示对象的计时器处理过程 timer = nil target = nil def delayproc(object) if target != nil target.setVisible(Mwt::True) end end # EXIT 事件过程 # 在程序结束时,显示对话框 def exit_ep(object) if object.getVisible() != Mwt::False return end msg = Mwt::WSGIappMessageDialog() #A msg.setProperty("width",500) msg.setProperty("no",Mwt::True) msg.setProperty("defaultPosition",Mwt::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 == nil parent = object.getParentWindow() timer = Mwt::WSCbase::getNewInstance("WSCvtimer",parent,"objname") timer.init timer.setProperty("interval",250) timer.setProperty("cont",Mwt::False) timer.addProcedure("delay-popup","delayproc",Mwt::WSEV_ACTIVATE) end if ret == Mwt::WS_DIALOG_OK # 选择“OK”按钮的场合 C # saving some data ... exit 0 elsif ret == Mwt::WS_DIALOG_NO # 选择“NO”按钮的场合 D exit 0 elsif ret == Mwt::WS_DIALOG_CANCEL # 选择“CANCEL”按钮的场合 E target = object timer.setProperty("running",Mwt::True) # 启动计时器 end endA 获得信息对话框实例。B 显示信息对话框。
C、D、E 判断对话框的返回值。
E 继续运行重新显示时,需要使用计时器实现少许延时处理。 这是因为,在窗口系统中要求在重新显示窗口之前产生结束事件。
[确认结束的对话框]
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |