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

クラス tanuki::cl_process_wnd の解説

メッセージを処理する類のウィンドウ用基底クラス [詳細]

#include <tanuki_wnd.h>

tanuki::cl_process_wndに対する継承グラフ

tanuki::cl_wnd_base すべてのメンバ一覧

Public メソッド

void EnableReplyPaint (bool is_reply=true)
 WM_PAINT メッセージに応答するかどうかを指定する.


Protected 型

typedef BOOL(* wm_handler_t )(cl_process_wnd *p_myself, WPARAM wprm, LPARAM lprm, LRESULT &result)
 ウィンドウメッセージハンドラ型

typedef void(* cmd_handler_t )(cl_process_wnd *p_myself)
 コマンドハンドラ型

enum  { WMSG_HASH_TABLE_SIZE = 1021, CMD_HASH_TABLE_SIZE = 127 }

Protected メソッド

 cl_process_wnd ()
 コンストラクタ

virtual ~cl_process_wnd ()
 デストラクタ

void registerWndMessageHandler (UINT msg_id, wm_handler_t handler)
 ウィンドウメッセージハンドラの追加

bool registerCommandHandler (WORD cmd_id, cmd_handler_t handler)
 コマンドハンドラの追加

BOOL callWndMessageHandler (UINT msg_id, WPARAM wprm, LPARAM lprm, LRESULT &result)
 ウィンドウメッセージハンドラの呼び出し

BOOL callCommandHandler (WORD cmd_id)
 コマンドハンドラの呼び出し

virtual BOOL onCreate (LPCREATESTRUCT p_create_st, LRESULT &result)
 WM_CREATE : ウィンドウ構築メッセージハンドラ.

virtual int onDestroy ()
 WM_DESTROY : ウィンドウ破棄メッセージハンドラ.

virtual BOOL onMouseMove (const POINT &pos, DWORD key_indicator)
 WM_MOUSEMOVE : マウスカーソル移動メッセージハンドラ.

virtual BOOL onMouseLeftButtonDown (const POINT &pos, DWORD key_indicator)
 WM_LBUTTONDOWN : マウス左ボタン押下メッセージハンドラ.

virtual BOOL onMouseLeftButtonUp (const POINT &pos, DWORD key_indicator)
 WM_LBUTTONUP : マウス左ボタン解放メッセージハンドラ.

virtual void onPaint (HDC h_dc, BOOL is_erase, const RECT &rect)
 WM_PAINT : 再描画メッセージハンドラ.


解説

メッセージを処理する類のウィンドウ用基底クラス

ウィンドウメッセージを処理するウィンドウ (通常のウィンドウ、およびダイアログボックス) の基底となるクラス。 本クラスの存在意義は以下のとおり。


Typedef の解説

typedef void(* tanuki::cl_process_wnd::cmd_handler_t)(cl_process_wnd * p_myself) [protected]
 

コマンドハンドラ型

引数:
p_myself  (IO) cl_wnd_base 派生クラスインスタンスへの ポインタ
コマンドハンドラとして登録する関数に共通の型。 実際には static ではない本体の処理用関数を呼び出すだけの関数となる。 コマンドハンドラを定義する要綱については、 registerCommandHandler() メソッドの説明を参照のこと。

typedef BOOL(* tanuki::cl_process_wnd::wm_handler_t)(cl_process_wnd * p_myself, WPARAM wprm, LPARAM lprm, LRESULT & result) [protected]
 

ウィンドウメッセージハンドラ型

引数:
p_myself  (IO) cl_wnd_base 派生クラスインスタンスへの ポインタ
wprm  (I) ウィンドウメッセージの WPARAM 型パラメータ
lprm  (I) ウィンドウメッセージの LPARAM 型パラメータ
result  (O) ウィンドウメッセージハンドラの戻り値
戻り値:
TRUE  ウィンドウメッセージに対する処理を行った。
FALSE  ウィンドウメッセージに対する処理を 行わなかった。
ウィンドウメッセージハンドラとして登録する関数に共通の型。 実際には static ではない本体の処理用関数を呼び出すだけの関数となる。 実際にオーバーライド可能なハンドラ関数は、その機能により型が異なる。


Enum の解説

anonymous enum [protected]
 

Enum 値:
WMSG_HASH_TABLE_SIZE  ウィンドウメッセージハッシュ配列のサイズ
CMD_HASH_TABLE_SIZE  コマンドハッシュ配列のサイズ


コンストラクタとデストラクタの解説

tanuki::cl_process_wnd::cl_process_wnd   [protected]
 

コンストラクタ

本クラスのコンストラクタは、ウィンドウメッセージハンドラ関数の ハッシュテーブルへの登録、および主要なコマンドハンドラ関数 (IDOK, IDCANCEL 等に対応する、 onOK() や onCancel() など) のハッシュテーブルへの登録を行う。


メソッドの解説

BOOL tanuki::cl_process_wnd::callCommandHandler WORD    cmd_id [protected]
 

コマンドハンドラの呼び出し

引数:
cmd_id  (I) コマンド ID
戻り値:
TRUE  対応するコマンドハンドラが存在した
FALSE  対応するコマンドハンドラは存在しなかった
コマンド ID からコマンドハンドラ関数を検索し、 あればそのハンドラ関数を実行します。
この関数は、 cl_normal_wnd::window_procedure() 関数および cl_dialog::dialog_procedure() 関数より呼び出されることを 想定しています。従って、本メソッドは使用しないで下さい。 特定のウィンドウメッセージハンドラを実行する必要がある場合は、 SendCommand() メソッドか、もしくは PostCommand() メソッドを 使用してください。

BOOL tanuki::cl_process_wnd::callWndMessageHandler UINT    msg_id,
WPARAM    wprm,
LPARAM    lprm,
LRESULT &    result
[protected]
 

ウィンドウメッセージハンドラの呼び出し

引数:
msg_id  (I) ウィンドウメッセージ ID
wprm  (I) ウィンドウメッセージの WPARAM 型パラメータ
lprm  (I) ウィンドウメッセージの LPARAM 型パラメータ
result  (O) ウィンドウメッセージハンドラの戻り値
戻り値:
TRUE  ウィンドウメッセージに対する処理を行った。
FALSE  ウィンドウメッセージに対する処理を 行わなかった。
ウィンドウメッセージ ID からメッセージハンドラ関数を検索し、 あればそのハンドラ関数を実行します。
この関数は、 cl_normal_wnd::window_procedure() 関数および cl_dialog::dialog_procedure() 関数より呼び出されることを 想定しています。従って、本メソッドは使用しないで下さい。 特定のウィンドウメッセージハンドラを実行する必要がある場合は、 SendMessage() メソッドか、もしくは PostMessage() メソッドを 使用してください。

void tanuki::cl_process_wnd::EnableReplyPaint bool    is_reply = true [inline]
 

WM_PAINT メッセージに応答するかどうかを指定する.

引数:
is_reply  (I) true を指定すると、 WM_PAINT メッセージに応答して onPaint() ハンドラが 呼び出されます。 false を指定した場合、WM_PAINT メッセージは無視されるようになります。
cl_normal_wnd 派生クラスにおいてはデフォルトで true 、 cl_dialog 派生クラスにおいてはデフォルトで false となっています。 onPaint() メッセージハンドラを使用しない場合は、本メソッドを false を渡して明示的に呼び出しておいたほうが、 処理が高速になる可能性があります。

virtual BOOL tanuki::cl_process_wnd::onCreate LPCREATESTRUCT    p_create_st,
LRESULT &    result
[inline, protected, virtual]
 

WM_CREATE : ウィンドウ構築メッセージハンドラ.

引数:
p_create_st  (I) ウィンドウ生成に関する情報
result  (O) ウィンドウ生成に関する戻り値。 以下のいずれかの値を指定します。
  • 0 ... 正常終了 (デフォルト)
  • -1 ... エラー。この場合、直ちに ウィンドウを破棄します。また、 コンストラクタは失敗し、 例外オブジェクト exc_window を送出します。
戻り値:
TRUE  result に指定した値を有効に終了する。
FALSE  result に指定した値は無視して、 確実に正常終了とする。
デフォルトの実装では、何も行わずに FALSE を返します。 通常、何かしらの処理を行った場合には、 result に 0 を設定し、 TRUE を返して終了するべきです。

virtual int tanuki::cl_process_wnd::onDestroy   [inline, protected, virtual]
 

WM_DESTROY : ウィンドウ破棄メッセージハンドラ.

戻り値 :
ウィンドウ終了の戻り値
ウィンドウを破棄した後に送られてくるメッセージです。 戻り値の値は、そのまま PostQuitMessage API に渡されます。

virtual BOOL tanuki::cl_process_wnd::onMouseLeftButtonDown const POINT &    pos,
DWORD    key_indicator
[inline, protected, virtual]
 

WM_LBUTTONDOWN : マウス左ボタン押下メッセージハンドラ.

引数:
pos  (I) クライアント領域におけるマウスカーソルの 座標値
key_indicator  (I) マウスボタンや Shift キーなどの状態を 表すフラグ。値の意味については、 onMouseMove() メソッドを参照のこと。
戻り値:
TRUE  このメッセージを処理した。
FALSE  このメッセージに対して何も処理を行わなかった。
マウスカーソルがウィンドウ上にあるときにマウスの左ボタンが 押されると、このメッセージハンドラが呼び出されます。

virtual BOOL tanuki::cl_process_wnd::onMouseLeftButtonUp const POINT &    pos,
DWORD    key_indicator
[inline, protected, virtual]
 

WM_LBUTTONUP : マウス左ボタン解放メッセージハンドラ.

引数:
pos  (I) クライアント領域におけるマウスカーソルの 座標値
key_indicator  (I) マウスボタンや Shift キーなどの状態を 表すフラグ。値の意味については、 onMouseMove() メソッドを参照のこと。
戻り値:
TRUE  このメッセージを処理した。
FALSE  このメッセージに対して何も処理を行わなかった。
マウスカーソルがウィンドウ上にあるときにマウスの左ボタンが 放されると、このメッセージハンドラが呼び出されます。

virtual BOOL tanuki::cl_process_wnd::onMouseMove const POINT &    pos,
DWORD    key_indicator
[inline, protected, virtual]
 

WM_MOUSEMOVE : マウスカーソル移動メッセージハンドラ.

引数:
pos  (I) クライアント領域におけるマウスカーソルの 座標値
key_indicator  (I) マウスボタンや Shift キーなどの状態を 表すフラグ。値の意味は以下の通り:
  • MK_LBUTTON ... マウス左ボタンが 押されている。
  • MK_RBUTTON ... マウス右ボタンが 押されている。
  • MK_MBUTTON ... マウス中ボタンが 押されている。
  • MK_SHIFT ... Shift キーが 押されている。
  • MK_CONTROL ... Ctrl キーが 押されている。
戻り値:
TRUE  このメッセージを処理した。
FALSE  このメッセージに対して何も処理を行わなかった。
ウィンドウ上でマウスカーソルが移動すると、このメッセージハンドラが 呼び出されます。

virtual void tanuki::cl_process_wnd::onPaint HDC    h_dc,
BOOL    is_erase,
const RECT &    rect
[inline, protected, virtual]
 

WM_PAINT : 再描画メッセージハンドラ.

引数:
h_dc  (I) 描画用デバイスコンテキストへのハンドル
is_erase  (I) 背景を塗りなおすべきかどうかを示すフラグ。 TRUE の場合、背景を塗りなおす必要がある。
rect  (I) 再描画を行うべき領域を示す RECT 構造体
再描画を行うべきタイミングにおいて、このメッセージハンドラは 呼び出されます。 h_dc に対して適切な描画処理を記述してください。
rect が指し示す領域は、 InvalidateRect() メソッドによって 指定した矩形となります。
なお、事前に EnableReplyPaint() メソッドを引数 false として呼んでいる場合、 このメッセージハンドラは呼び出されなくなります。

bool tanuki::cl_process_wnd::registerCommandHandler WORD    cmd_id,
cmd_handler_t    handler
[protected]
 

コマンドハンドラの追加

引数:
cmd_id  (I) コマンド ID
handler  (I) ハンドラ関数へのポインタ
戻り値:
true  正常終了
false  登録に失敗した
コマンドハンドラ関数をハッシュテーブルに登録します。 コマンドハンドラ関数の登録は、以下のように行います。
 class cl_my_wnd : public cl_normal_wnd {
 public:
        // コンストラクタ
        cl_my_wnd(HINSTANCE h_instance) : cl_normal_wnd(h_instance)
        {
                // IDC_XXXX コマンドハンドラを登録する
                registerCommandHandler(IDC_XXXX, on_xxxx_reg);
                // ウィンドウの生成
                prepareWindow();
        }
        // デストラクタ
        ~cl_my_wnd() {}
 private:
        // IDC_XXXX コマンドハンドラ (登録用)
        static void on_xxxx_reg(cl_process_wnd * p_myself)
        {
                p_myself->on_xxxx();
        }
        // IDC_XXXX コマンドハンドラ (本体)
        void on_xxxx()
        {
                // 処理内容をここに記述します。
        }
 };
コマンドハンドラを登録できる数は CMD_HASH_TABLE_SIZE 個までです。 それを超える数のコマンドハンドラを呼び出そうとすると、 登録に失敗します。

void tanuki::cl_process_wnd::registerWndMessageHandler UINT    msg_id,
wm_handler_t    handler
[protected]
 

ウィンドウメッセージハンドラの追加

引数:
msg_id  (I) ウィンドウメッセージ ID
handler  (I) ハンドラ関数へのポインタ
ウィンドウメッセージハンドラ関数をハッシュテーブルに登録します。 派生クラスにて使用した場合、該当するオーバーライド可能な ハンドラ関数は、オーバーライドしても呼ばれなくなり、 代わりに後から登録した関数が呼ばれるようになります。 通常は、 cl_process_wnd クラスに登録されているハンドラ関数を オーバーライドして使用してください。


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