| WideStudio Programming Guide | WideStudio 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 の終了せずに再び、表示しなおす場合、タイマーを使って、少しタイミング を送らせる必要があります。これは、ウィンドウシステムに対し、既に画面終 了イベントが発生しているため、そのイベントの処理が確実に処理されてから、 表示を行わなければならないからです。

> ［終了確認ダイアログ］

Document Release 3.70 for WideStudio ver 3.70, May 2004

WideStudio documents index | 目次

Copyright(C) WideStudio Development Team, 1999-2004 | Last modified: May 25, 2004