![]() | Programming Guide | WideStudio/MWT Index 目次 |
EXIT トリガによる終了イベントプロシージャでダイアログを表示するには
ウィンドウを閉じてアプリケーションを終了する場合、データの保存を行った り、終了するか否かをダイアログを表示したい場合があります。そのような場 合、WSCwindow / WSCmainWindow クラスの EXIT トリガでイベントプロシージャ を使うと便利です。WSCwindow/WSCmainWindow クラスは、ウィンドウが不可視 状態になった場合に、EXIT トリガをあげ、アプリケーションが終了する前に、 イベントプロシージャを実行する機能を持っています。
まず、WSCwindow もしくは WSCmainWindow クラスのプロパティ WSNexit を True にします。このプロパティは、アプリケーション中のウィンドウで特に メインで用いられるものに設定すると良いでしょう。そしてそのウィンドウに 対して、EXIT トリガでイベントプロシージャを張り付けます。
次のような機能を持つイベントプロシージャを作ってみます。
終了するか否かのダイアログを表示。 「OK」が選択された場合は、処理を行って終了。 「NO」が選択された場合は、処理を行わず終了。 「CANCEL」が選択された場合は、処理を行わず終了もしない。 #include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <WSCmessageDialog.h> #include <WSDtimer.h> //インスタンスを表示しなおすタイマープロシージャ 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);A で、メッセージダイアログインスタンスを取得し、B でメッセージダイアログを 表示します。
C、D、E でダイアログの結果を判定し、OKボタンがおされたならば C、NO ボ タンがおされたならば D、CANCEL ボタンがおされたならば E となります。
E の終了せずに再び、表示しなおす場合、タイマーを使って、少しタイミング を送らせる必要があります。これは、ウィンドウシステムに対し、既に画面終 了イベントが発生しているため、そのイベントの処理が確実に処理されてから、 表示を行わなければならないからです。
[終了確認ダイアログ]
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |