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