Wide Studio Programmer's Guide

Wide Studio Home
Up to


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 2.0

    For Use with Wide Studio Release 2.0, Spring 2002


    Wide Stuido Home | Up to

    Copyright(C) S. Hirabayashi, 1999-2002 Last modified: January 1, 2002