CMDIChildWindowImpl

http://toshi.my.land.to/wtl/reference/?CMDIChildWindowImpl
* トップ ページ - WTL - リファレンス - CMDIChildWindowImpl :: 説明 / 解説 / 参照 / 情報 / メソッド / イベント ハンドラ

説明

MDI チャイルド ウィンドウの振る舞いを実装しているクラスです。

解説

通常、このクラスを継承して、独自のウィンドウの振る舞いを実装するクラスを作成します。
その際、テンプレート引数 T にはそのクラス自身を渡します。
このように、基本クラスのテンプレート引数に派生クラス自身を渡して継承することは、CRTP (Curiously Recurring Template Pattern : 奇妙に再帰したテンプレート パターン) と呼ばれます。

通常、このクラスを利用して MDI チャイルド ウィンドウを作成するには、次のクラスを作成する必要があります。
CMDIFrameWindowImpl クラスを継承して MDI フレーム ウィンドウの振る舞いを実装した独自のクラス(以下、MDI フレーム ウィンドウ実装クラス)
・このクラスを継承した独自のクラス(以下、MDI チャイルド ウィンドウ実装クラス)
そして、MDI チャイルド ウィンドウ実装クラスから new 演算子を利用して新規にオブジェクトを生成し、Create メソッドまたは CreateEx メソッドを呼び出します。
その際、親ウィンドウとして MDI クライアント ウィンドウを指定しなければならないため、MDI フレーム ウィンドウ実装クラスの m_hWndMDIClient メンバをメソッドに渡します。

テンプレート引数 TBase は、既定では CMDIWindow です。TWinTraits は、ATL::CMDIChildWinTraits です。
これらは、ウィンドウの基本的な振る舞い、およびウィンドウの特徴(スタイル)を定義するものです。
通常これらを変更する必要はありません。
つまり、特別な場合でない限り、テンプレート引数には T を指定するのみです。

参照

CMDIWindow
CMDIFrameWindowImpl

情報

タイプ : テンプレート
継承クラス : CFrameWindowImplBase
ヘッダ : atlframe.h

メソッド

Create
ウィンドウを作成します。
CreateEx
共通リソース ID によって、ウィンドウを作成します。
CreateSimpleToolBar
ウィンドウ上にツール バーを作成します。
UpdateClientEdge
MDI クライアント ウィンドウの縁を必要に応じて再描画します。

イベント ハンドラ

OnChevronPushed
RBN_CHEVRONPUSHED 通知のハンドラです。
OnDestroy
WM_DESTROY メッセージのハンドラです。
OnMDIActivate
WM_MDIACTIVATE メッセージのハンドラです。
OnMenuSelect
WM_MENUSELECT メッセージのハンドラです。
OnMouseActivate
WM_MOUSEACTIVATE メッセージのハンドラです。
OnReBarAutoSize
RBN_AUTOSIZE 通知のハンドラです。
OnSize
WM_SIZE メッセージのハンドラです。
OnWindowPosChanged
WM_WINDOWPOSCHANGED メッセージのハンドラです。


Create

ウィンドウを作成します。

HWND Create(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR szWindowName = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, UINT nMenuID = 0, LPVOID lpCreateParam = NULL);

引数

HWND hWndParent
親ウィンドウを指定します。親ウィンドウは、必ず MDI クライアント ウィンドウでなければなりません。

ATL::_U_RECT rect = NULL
ウィンドウの位置情報を示す RECT 構造体を指定します。既定では NULL で、TBase::rcDefault になります。

LPCTSTR szWindowName = NULL
ウィンドウの名前を指定します。既定では NULL です。

DWORD dwStyle = 0
ウィンドウ スタイルを指定します。既定では 0 で、TWinTraits の持つスタイルになります。

DWORD dwExStyle = 0
拡張ウィンドウ スタイルを指定します。既定では 0 で、TWinTraits の持つスタイルになります。

UINT nMenuID = 0
メニューのリソース ID を指定します。既定では 0 です。

LPVOID lpCreateParam = NULL
ユーザー定義のパラメータを指定します。既定では NULL です。

戻り値

作成に成功した場合、ウィンドウ ハンドルを返します。

解説

このメソッドは、現在アクティブな MDI チャイルド ウィンドウが最大化されている場合、作成したウィンドウも最大化します。


CreateEx

共通リソース ID によって、ウィンドウを作成します。

HWND CreateEx(HWND hWndParent, ATL::_U_RECT rect = NULL, LPCTSTR lpcstrWindowName = NULL, DWORD dwStyle = 0, DWORD dwExStyle = 0, LPVOID lpCreateParam = NULL);

引数

HWND hWndParent
親ウィンドウを指定します。親ウィンドウは、必ず MDI クライアント ウィンドウでなければなりません。

ATL::_U_RECT rect = NULL
ウィンドウの位置情報を示す RECT 構造体を指定します。既定では NULL で、TBase::rcDefault になります。

LPCTSTR lpcstrWindowName = NULL
ウィンドウの名前を指定します。既定では NULL で、共通リソース ID によって読み込まれた文字列リソースになります。

DWORD dwStyle = 0
ウィンドウ スタイルを指定します。既定では 0 で、TWinTraits の持つスタイルになります。

DWORD dwExStyle = 0
拡張ウィンドウ スタイルを指定します。既定では 0 で、TWinTraits の持つスタイルになります。

LPVOID lpCreateParam = NULL
ユーザー定義のパラメータを指定します。既定では NULL です。

戻り値

作成に成功した場合、ウィンドウ ハンドルを返します。

解説

共通リソース ID は、DECLARE_FRAME_WND_CLASS マクロ、または DECLARE_FRAME_WND_CLASS_EX マクロで定義します。
これによって、ウィンドウの名前、メニュー、アクセラレータ キーがこのメソッドで自動的に設定されます。


CreateSimpleToolBar

ウィンドウ上にツール バーを作成します。

BOOL CreateSimpleToolBar(UINT nResourceID = 0, DWORD dwStyle = ATL_SIMPLE_TOOLBAR_STYLE, UINT nID = ATL_IDW_TOOLBAR);

引数

UINT nResourceID = 0
リソース ID を指定します。既定では 0 で、共通リソース ID になります。

DWORD dwStyle = ATL_SIMPLE_TOOLBAR_STYLE
ウィンドウ スタイルを指定します。既定では ATL_SIMPLE_TOOLBAR_STYLE です。

UINT nID = ATL_IDW_TOOLBAR
ID を指定します。既定では ATL_IDW_TOOLBAR です。

戻り値

作成に成功したかどうかを返します。

解説

作成に成功した場合、m_hWndToolBar にウィンドウ ハンドルが格納されます。


UpdateClientEdge

MDI クライアント ウィンドウの縁を必要に応じて再描画します。

BOOL UpdateClientEdge(LPRECT lpRect = NULL);

引数

LPRECT lpRect = NULL
更新された MDI クライアント ウィンドウのクライアント領域が格納される RECT 構造体を指定します。既定では NULL です。

戻り値

再描画を行ったかどうかを返します。

解説

このメソッドは、OnWindowPosChanged ハンドラ、および OnDestroy ハンドラが呼び出します。通常呼び出す必要はありません。

このメソッドは、自ウィンドウの拡張スタイルに WS_EX_CLIENTEDGE フラグが設定されておらず、かつ最大化された状態でアクティブである場合、MDI クライアント ウィンドウは WS_EX_CLIENTEDGE スタイルを持つべきでないと判断します。
上記の条件が一つでも満たされない場合は、WS_EX_CLIENTEDGE スタイルを持つべきであると判断します。
そして、その結果が今まで持っていた拡張スタイルと異なっていた場合にのみ、MDI クライアント ウィンドウの縁を再描画します。


OnChevronPushed

RBN_CHEVRONPUSHED 通知のハンドラです。

LRESULT OnChevronPushed(int /*idCtrl*/, LPNMHDR pnmh, BOOL& bHandled);

引数

int /*idCtrl*/
コントロールの ID です。このハンドラでは使用されません。

LPNMHDR pnmh
NMHDR 構造体へのポインタです。

BOOL& bHandled
メッセージを処理したかどうかを示します。

戻り値

メニューを表示した場合、0 を返します。表示の準備に失敗した場合、1 を返します。


OnDestroy

WM_DESTROY メッセージのハンドラです。

LRESULT OnDestroy(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled);

引数

UINT /*uMsg*/
WM_DESTROY メッセージです。このハンドラでは使用されません。

WPARAM /*wParam*/
メッセージに付加されたパラメータです。このハンドラでは使用されません。

LPARAM /*lParam*/
メッセージに付加されたパラメータです。このハンドラでは使用されません。

BOOL& bHandled
メッセージを処理したかどうかを示します。

戻り値

常に 1 を返します。

解説

このハンドラは、m_hMenu メンバが有効である場合にそれを破棄し、UpdateClientEdge メソッドを呼び出します。


OnMDIActivate

WM_MDIACTIVATE メッセージのハンドラです。

LRESULT OnMDIActivate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled);

引数

UINT /*uMsg*/
WM_MDIACTIVATE メッセージです。このハンドラでは使用されません。

WPARAM /*wParam*/
メッセージに付加されたパラメータです。このハンドラでは使用されません。

LPARAM lParam
メッセージに付加されたパラメータです。

BOOL& bHandled
メッセージを処理したかどうかを示します。

戻り値

常に 1 を返します。

解説

このハンドラは、m_hWnd メンバのウィンドウ(自分自身が管理しているウィンドウ)がアクティブにされようとしており、かつ m_hMenu メンバが有効である場合、CMDIWindow クラスの SetMDIFrameMenu メソッドを呼び出して MDI フレーム ウィンドウにメニューを設定します。
また、アクティブな MDI チャイルド ウィンドウが存在しなくなった場合、MDI フレーム ウィンドウに対してそれ自身が持っているメニュー(CMDIWindow クラスの m_hMenu メンバ)を新しいメニューに設定するよう通知する目的で、MDI フレーム ウィンドウに WM_MDISETMENU メッセージを送信します。


OnMenuSelect

WM_MENUSELECT メッセージのハンドラです。

LRESULT OnMenuSelect(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/);

引数

UINT uMsg
WM_MENUSELECT メッセージです。

WPARAM wParam
メッセージに付加されたパラメータです。

LPARAM lParam
メッセージに付加されたパラメータです。

BOOL& /*bHandled*/
メッセージを処理したかどうかを示します。このハンドラでは使用されません。

戻り値

SendMessage API の戻り値を返します。

解説

このハンドラは、MDI フレーム ウィンドウに同じ内容のメッセージを送信し、その戻り値を返します。


OnMouseActivate

WM_MOUSEACTIVATE メッセージのハンドラです。

LRESULT OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/);

引数

UINT uMsg
WM_MOUSEACTIVATE メッセージです。

WPARAM wParam
メッセージに付加されたパラメータです。

LPARAM lParam
メッセージに付加されたパラメータです。

BOOL& /*bHandled*/
メッセージを処理したかどうかを示します。このハンドラでは使用されません。

戻り値

MDI フレーム ウィンドウがこのメッセージを処理した結果を、CFrameWindowImplBase クラスの DefWindowProc メソッドの戻り値を介して返します。

解説

このハンドラは、CFrameWindowImplBase クラスの DefWindowProc メソッドを呼び出して MDI フレーム ウィンドウにこのメッセージの処理を依頼し、その戻り値を返します。

DefWindowProc メソッドの戻り値が MA_ACTIVE または MA_ACTIVEANDEAT であった場合、CMDIWindow クラスの MDIActivate メソッドを呼び出して m_hWnd メンバのウィンドウをアクティブにします。


OnReBarAutoSize

RBN_AUTOSIZE 通知のハンドラです。

LRESULT OnReBarAutoSize(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/);

引数

int /*idCtrl*/
コントロールの ID です。このハンドラでは使用されません。

LPNMHDR /*pnmh*/
NMHDR 構造体へのポインタです。このハンドラでは使用されません。

BOOL& /*bHandled*/
メッセージを処理したかどうかを示します。このハンドラでは使用されません。

戻り値

常に 0 を返します。

解説

このハンドラは、派生クラスがオーバーライドしていない限り、CFrameWindowImplBase クラスの UpdateLayout メソッドを呼び出します。


OnSize

WM_SIZE メッセージのハンドラです。

LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/);

引数

UINT uMsg
WM_SIZE メッセージです。

WPARAM wParam
メッセージに付加されたパラメータです。

LPARAM lParam
メッセージに付加されたパラメータです。

BOOL& /*bHandled*/
メッセージを処理したかどうかを示します。このハンドラでは使用されません。

戻り値

常に 0 を返します。

解説

このハンドラは、子ウィンドウのために CFrameWindowImplBase クラスの DefWindowProc メソッドを呼び出します。
また、ウィンドウが最小化されていない場合において、派生クラスがオーバーライドしていない限り、CFrameWindowImplBase クラスの UpdateLayout メソッドを呼び出します。


OnWindowPosChanged

WM_WINDOWPOSCHANGED メッセージのハンドラです。

LRESULT OnWindowPosChanged(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled);

引数

UINT /*uMsg*/
WM_WINDOWPOSCHANGED メッセージです。このハンドラでは使用されません。

WPARAM /*wParam*/
メッセージに付加されたパラメータです。このハンドラでは使用されません。

LPARAM lParam
メッセージに付加されたパラメータです。

BOOL& bHandled
メッセージを処理したかどうかを示します。

戻り値

常に 1 を返します。

解説

このメソッドは、ウィンドウのサイズが変更され、UpdateClientEdge メソッドが NULL でない値を返し、かつウィンドウが最大化された場合、AdjustWindowRectEx API を呼び出してウィンドウに必要な領域を計算し、lParam の指す WINDOWPOS 構造体に値を設定します。
注 : WM_WINDOWPOSCHANGED メッセージの lParam が指す WINDOWPOS 構造体は書き換えても何ら影響を及ぼしませんので、このコードは実質無意味です。
もしかしたら WM_WINDOWPOSCHANGING メッセージと混同されているのかもしれません。


Last Modified : 2010/05/19 (Wed.) 20:11:25

Librarian Version 0.3.1.5
By Toshi

ページの先頭へ戻る
リファレンスへ戻る
WTL へ戻る
トップ ページへ戻る

* トップ ページ - WTL - リファレンス - CMDIChildWindowImpl :: 説明 / 解説 / 参照 / 情報 / メソッド / イベント ハンドラ
http://toshi.my.land.to/wtl/reference/?CMDIChildWindowImpl
(C) 2005 - 2010 Toshi, All Rights Reserved.