![]() | Programming Guide | WideStudio/MWT Index Table of contents |
在退出(WSEV_EXIT)事件处理过程中通过EXIT触发器显示对话框
关闭窗口,结束应用程序时,通常需要显示是否保存数据等询问的对话框。 此时,通过WSCwindow / WSCmainWindow类的EXIT触发器的事件过程, 可以方便的实现该目的。WSCwindow/WSCmainWindow 类在窗口变为不可见 状态时,会产生EXIT触发器。在应用程序结束前执行相应的事件过程。
首先,将作为应用程序主窗口的WSCwindow 或者WSCmainWindow 类的WSNexit 属性设置为True。然后,为该窗口类的EXIT 触发器设置事件过程。
生成具有如下功能的事件过程。
显示询问是否结束的对话框。 当选择“OK”按钮时,执行指定的处理后结束运行。 当选择“NO”按钮时,立即结束运行。 当选择“CANCEL”按钮时,不做任何处理继续运行。 #includeA 获得信息对话框实例。B 显示信息对话框。#include #include //---------------------------------------------------------- //事件过程对应的处理函数 //---------------------------------------------------------- #include #include //重新显示对象的计时器处理过程 void delayproc(unsigned char,void* ptr){ WSCbase* object = (WSCbase*)ptr; object->setVisible(True); } //EXIT 事件过程 //在程序结束时,显示对话框 void exit_ep(WSCbase* object){ if (object->getVisible() != False){ return; } WSCmessageDialog* msg = WSGIappMessageDialog(); //A msg->setProperty(WSNwidth,500); msg->setProperty(WSNno,True); msg->setProperty(WSNdefaultPosition,True); msg->setProperty(WSNlabelString, "Exit and save data?\n If you do not want to save and exit,push NO..."); //显示对话框 long ret = msg->popup(); //B if (ret == WS_DIALOG_OK){ //选择“OK”按钮的场合 C //saving some data ... exit(0); }else if (ret == WS_DIALOG_NO){ //选择“NO”按钮的场合 D exit(0); }else if (ret == WS_DIALOG_CANCEL){ //选择“CANCEL”按钮的场合 E WSGIappTimer()->addTriggerProc(delayproc,WS250MS,object); } } static WSCfunctionRegister op("exit_ep",(void*)exit_ep);
C、D、E 判断对话框的返回值。
E 继续运行重新显示时,需要使用计时器实现少许延时处理。 这是因为,在窗口系统中要求在重新显示窗口之前产生结束事件。
[确认结束的对话框]
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |