メインページ   クラス階層   構成   ファイル一覧   構成メンバ  

クラス tanuki::cl_application の解説

アプリケーション基本クラス [詳細]

#include <tanuki_app.h>

すべてのメンバ一覧

Public メソッド

virtual void Initialize (HINSTANCE h_instance, LPCTSTR argv, int show_flag)
 アプリケーションの初期化

virtual void Terminate ()
 アプリケーションの終端処理

bool RegisterModelessDialog (HWND h_dlg)
 モードレスダイアログの登録

bool RemoveModelessDialog (HWND h_dlg)
 モードレスダイアログの削除

bool DispatchModelessDialogMessage (LPMSG p_msg)
 モードレスダイアログ宛てのメッセージを転送する

HINSTANCE GetInstanceHandle () const
 アプリケーションインスタンスのハンドルを取得する

bool IsUseMessageLoop () const
 メッセージループを行うかどうかのフラグを得る

bool IsUseTranslateMessage () const
 仮想キーメッセージを文字メッセージに変換するかどうかのフラグを得る

bool IsUseTranslateAccelerator () const
 アクセラレータキーを使用するかどうかのフラグを得る

bool IsUseModelessDialog () const
 モードレスダイアログを使用するかどうかのフラグを得る


Static Public メソッド

cl_application * GetApplicationPtr ()
 アプリケーションに唯一のインスタンスへのポインタを得る


Public 変数

int M_ReturnValue
 アプリケーションの戻り値


Protected メソッド

 cl_application ()
 コンストラクタ

virtual ~cl_application ()=0
 デストラクタ

void useMessageLoop (bool is_use=true)
 メッセージループを行うかどうかを指定する

void useTranslateMessage (bool is_use=true)
 仮想キーメッセージを文字メッセージに変換するかを指定する

void useTranslateAccelerator (bool is_use=true)
 アクセラレータキーを使用するかを指定する

void useModelessDialog (bool is_use=true)
 モードレスダイアログを使用するかを指定する


解説

アプリケーション基本クラス

アプリケーションの初期化・終端処理を担う基本クラス。 このオブジェクトの派生クラスインスタンスを、アプリケーションイメージごとに 1 つだけ保持すること (通常は静的な外部変数かもしくは派生クラスにおける 静的公開フィールドを 1 つ持たせておけばよい) 。 それにより、本ライブラリ内部に実装される _tWinMain() 関数より参照され、 用意されたインスタンスの Initialize() メソッドがメッセージループの開始前に 呼び出され、さらにメッセージループ終了直後に Terminate() メソッドが呼び出される。
派生クラスの実装例を以下に示すので参考まで。

 class cl_my_main_wnd;  // ウィンドウ派生クラス

 // アプリケーション派生クラス
 class cl_my_app : public cl_application {
        // インスタンスを静的メンバフィールドとする場合、他所で誤って
        // 呼び出さないよう、コンストラクタとデストラクタは非公開メソッドと
        // することができる。その方がよい。
 private:
        // コンストラクタ
        cl_my_app() : cl_application() {}
        // デストラクタ
        virtual ~cl_my_app() {}
 public:
        // 初期化処理のオーバーライド
        virtual bool Initialize(HINSTANCE h_instance)
        {
                // アプリケーションインスタンスを親クラスフィールドに格納
                cl_application::Initialize(h_instance);
                
                // ... 初期化処理をここに記述 ...
        }
        // 終端処理のオーバーライド
        virtual bool Terminate()
        {
                // ... 終端処理をここに記述 ...
        }
 public:
        // このアプリケーションに唯一のアプリケーションインスタンス
        static cl_my_app        m_my_app;
 private:
        // ウィンドウオブジェクト
        cl_my_main_wnd          m_my_main_window;
 };

 // 静的メンバフィールドは、外部で定義する必要がある
 cl_my_app      cl_my_app::m_my_app;
上記の例ではアプリケーションインスタンスを派生クラスの静的な 公開フィールドとしているが、実際には GetApplicationPtr() メソッドに よってこのインスタンスへのポインタを得ることができるので、 非公開フィールドとしても問題はない。 非公開フィールドとしたい特別な理由があればそうしてもよい (もっとも、 結局は操作可能なインスタンスとして参照できるため、 ダウンキャストさえ厭わないのであればあまり意味は無いが) 。
また、このクラスインスタンスは常にアプリケーションインスタンスハンドルを 保持しており、アプリケーションインスタンスを用いて行う Windows への操作を代行する機能も兼ねている。


メソッドの解説

cl_application* tanuki::cl_application::GetApplicationPtr   [inline, static]
 

アプリケーションに唯一のインスタンスへのポインタを得る

戻り値 :
アプリケーションクラスインスタンスへのポインタ

HINSTANCE tanuki::cl_application::GetInstanceHandle   const [inline]
 

アプリケーションインスタンスのハンドルを取得する

戻り値 :
アプリケーションインスタンスへのハンドル

virtual void tanuki::cl_application::Initialize HINSTANCE    h_instance,
LPCTSTR    argv,
int    show_flag
[inline, virtual]
 

アプリケーションの初期化

引数:
h_instance  (I) アプリケーションインスタンスへのハンドル
argv  (I) コマンドライン文字列へのポインタ
show_flag  (I) メインウィンドウの表示状態を指定する、 Windows 定義のフラグ。 MSDN Library にて、 WinMain 関数の引数 nCmdShow の説明を 参照のこと。
例外:
exc_application  アプリケーションの初期化中に特別な エラーが発生した
アプリケーションの初期化のために、必ずオーバーライドしてください。 また、オーバーライドしたメソッドの中で、必ず基底クラスの このメソッドを呼び出してください。 実装例は cl_application クラスの解説を参照のこと。
なお、このメソッドは WinMain() 関数から呼び出されることを前提と しています。このメソッド、およびこれをオーバーライドしたメソッドを、 それ以外の場所から呼び出さないようにしてください。

bool tanuki::cl_application::IsUseMessageLoop   const [inline]
 

メッセージループを行うかどうかのフラグを得る

戻り値:
true  メッセージループを行う
false  メッセージループは行わない
useMessageLoop() メソッドにて指定した値がそのまま返ります。 _tWinMain() 関数内にて使用されることを想定しています。

bool tanuki::cl_application::IsUseModelessDialog   const [inline]
 

モードレスダイアログを使用するかどうかのフラグを得る

戻り値:
true  モードレスダイアログを使用します
false  使用しません
useModelessDialog() メソッドにて指定した値がそのまま返ります。 _tWinMain() 関数内にて使用されることを想定しています。

bool tanuki::cl_application::IsUseTranslateAccelerator   const [inline]
 

アクセラレータキーを使用するかどうかのフラグを得る

戻り値:
true  アクセラレータキーを使用します
false  使用しません
useTranslateAccelerator() メソッドにて指定した値がそのまま返ります。 _tWinMain() 関数内にて使用されることを想定しています。

bool tanuki::cl_application::IsUseTranslateMessage   const [inline]
 

仮想キーメッセージを文字メッセージに変換するかどうかのフラグを得る

戻り値:
true  変換を行います
false  変換を行いません
useTranslateMessage() メソッドにて指定した値がそのまま返ります。 _tWinMain() 関数内にて使用されることを想定しています。

bool tanuki::cl_application::RegisterModelessDialog HWND    h_dlg
 

モードレスダイアログの登録

引数:
h_dlg  (I) モードレスダイアログへのウィンドウハンドル
戻り値:
true  登録に成功
false  登録に失敗 (許容数を超えているため)
Tanuki Window Library を使用するのであれば、この関数は cl_dialog::prepareModelessDialog() メソッドより呼び出されるので、 明示的に呼び出す必要は無い。
本メソッドによって登録されたモードレスダイアログへの ウィンドウハンドルは、モードレスダイアログ宛てのメッセージを それらのモードレスダイアログへ転送するために使用される。

virtual void tanuki::cl_application::Terminate   [inline, virtual]
 

アプリケーションの終端処理

例外:
exc_application  アプリケーションの終端処理中に特別な エラーが発生した
アプリケーションの終端処理のためにオーバーライドすることができます (初期化処理とは違い、必ずしもオーバーライドする必要はありません) 。

void tanuki::cl_application::useMessageLoop bool    is_use = true [inline, protected]
 

メッセージループを行うかどうかを指定する

引数:
is_use  (I) メッセージループを行う場合は true を指定します。
_tWinMain() 関数において、メッセージループを処理するか否かを 設定します。 false を指定すると、メッセージループはスキップし、 Initialize() メソッドの直後に Terminate() メソッドが呼ばれるように なります。 ウィンドウを伴わないアプリケーションや、モーダルダイアログボックス のみを表示するアプリケーションを作成する場合に使用してください。

インスタンス生成時のデフォルトは true となっています。

void tanuki::cl_application::useModelessDialog bool    is_use = true [inline, protected]
 

モードレスダイアログを使用するかを指定する

引数:
is_use  (I) 使用する場合は true を指定します。
モードレスダイアログボックスを使用するか否かを設定します。 使用する予定がある場合には、必ずこれを true で呼び出しておく 必要があります。 具体的には、このメソッドに true を渡して呼び出すと、 メッセージループにて IsDialogMessage API を使用するようになり、 モードレスダイアログボックスに宛てられたメッセージを ダイアログボックスプロシージャへ転送するようになります (具体的には、 Tab キーやカーソルキーなどによるフォーカス移動を 実現するものです。。。詳細は MSDN を参照のこと)。

void tanuki::cl_application::useTranslateAccelerator bool    is_use = true [inline, protected]
 

アクセラレータキーを使用するかを指定する

引数:
is_use  (I) 使用する場合は true を指定します。
_tWinMain() 関数におけるメッセージループにおいて、 アクセラレータキーを処理するか否かを設定します。 具体的には、このメソッドに true を渡して呼び出すと、 メッセージループにて TranslateAccelerator API を使用するようになり、アクセラレータキーに登録されている 仮想キーに対して以下のようなメッセージの変換と転送が 行われるようになります (詳細は、 MSDN を参照のこと)。
  • WM_KEYDOWNWM_COMMAND
  • WM_SYSKEYDOWNWM_SYSCOMMAND
インスタンス生成時のデフォルトは true となっています。

void tanuki::cl_application::useTranslateMessage bool    is_use = true [inline, protected]
 

仮想キーメッセージを文字メッセージに変換するかを指定する

引数:
is_use  (I) 変換する場合は true を指定します。
_tWinMain() 関数におけるメッセージループにおいて、 仮想キーメッセージを文字メッセージに変換するか否かを設定します。 具体的には、このメソッドに true を渡して呼び出すと、 メッセージループにて TranslateMessage API を使用するようになり、 以下のようにメッセージの変換が行われるようになります。
  • WM_KEYDOWNWM_CHAR
  • WM_KEYUPWM_DEADCHAR
  • WM_SYSKEYDOWNWM_SYSCHAR
  • WM_SYSKEYUPWM_SYSDEADCHAR
インスタンス生成時のデフォルトは true となっています。


変数の解説

int tanuki::cl_application::M_ReturnValue
 

アプリケーションの戻り値

アプリケーションの戻り値を格納する変数です。 _tWinMain() 関数は最後にこの値を返してアプリケーションを終了します。 モジュール生成時の初期値は 0 です。


このクラスの解説は次のファイルから生成されました:
Tanuki Libraryに対してWed Aug 21 22:49:02 2002に生成されました。 doxygen1.2.17