#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;
|
アプリケーションに唯一のインスタンスへのポインタを得る
|
|
アプリケーションインスタンスのハンドルを取得する
|
|
アプリケーションの初期化
なお、このメソッドは WinMain() 関数から呼び出されることを前提と しています。このメソッド、およびこれをオーバーライドしたメソッドを、 それ以外の場所から呼び出さないようにしてください。 |
|
メッセージループを行うかどうかのフラグを得る
|
|
モードレスダイアログを使用するかどうかのフラグを得る
|
|
アクセラレータキーを使用するかどうかのフラグを得る
|
|
仮想キーメッセージを文字メッセージに変換するかどうかのフラグを得る
|
|
モードレスダイアログの登録
本メソッドによって登録されたモードレスダイアログへの ウィンドウハンドルは、モードレスダイアログ宛てのメッセージを それらのモードレスダイアログへ転送するために使用される。 |
|
アプリケーションの終端処理
|
|
メッセージループを行うかどうかを指定する
false を指定すると、メッセージループはスキップし、 Initialize() メソッドの直後に Terminate() メソッドが呼ばれるように なります。 ウィンドウを伴わないアプリケーションや、モーダルダイアログボックス のみを表示するアプリケーションを作成する場合に使用してください。
インスタンス生成時のデフォルトは |
|
モードレスダイアログを使用するかを指定する
true で呼び出しておく 必要があります。 具体的には、このメソッドに true を渡して呼び出すと、 メッセージループにて IsDialogMessage API を使用するようになり、 モードレスダイアログボックスに宛てられたメッセージを ダイアログボックスプロシージャへ転送するようになります (具体的には、 Tab キーやカーソルキーなどによるフォーカス移動を 実現するものです。。。詳細は MSDN を参照のこと)。 |
|
アクセラレータキーを使用するかを指定する
true を渡して呼び出すと、 メッセージループにて TranslateAccelerator API を使用するようになり、アクセラレータキーに登録されている 仮想キーに対して以下のようなメッセージの変換と転送が 行われるようになります (詳細は、 MSDN を参照のこと)。
true となっています。 |
|
仮想キーメッセージを文字メッセージに変換するかを指定する
true を渡して呼び出すと、 メッセージループにて TranslateMessage API を使用するようになり、 以下のようにメッセージの変換が行われるようになります。
true となっています。 |
|
アプリケーションの戻り値 アプリケーションの戻り値を格納する変数です。 _tWinMain() 関数は最後にこの値を返してアプリケーションを終了します。 モジュール生成時の初期値は 0 です。 |