CAppModule

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

説明

アプリケーションのモジュール クラスです。

解説

WTL を利用する際には、この型のオブジェクトを _Module という名前でグローバルに定義する必要があります。
(プロジェクトをウィザードを利用して作成した場合、通常定義されています)
COM サーバー アプリケーションの場合は、代わりに CServerAppModule クラスを利用します。

プログラムは、開始時に Init メソッド、終了時に Term メソッドをそれぞれ呼び出す必要があります。
これらのメソッドは、CComModule クラスの Init メソッド、および Term メソッドをそれぞれオーバーライドしています。
また、メッセージ ループを開始する前に AddMessageLoop メソッドを呼び出して登録し、終了した後に RemoveMessageLoop メソッドを呼び出して登録を解除する必要があります。

メッセージ ハンドラの中でメッセージ ループ オブジェクトにアクセスしたい場合、このクラスの GetMessageLoop メソッドを呼び出します。

本来、Windows の設定変更の通知である WM_SETTINGCHANGE メッセージは全てのトップレベル ウィンドウに対して送信されますが、トップレベルでないウィンドウもこの通知を受け取りたい場合、このクラスを利用することができます。
(おそらくですが、そういう意図のために実装されているものと思われます)
このクラスの InitSettingChangeNotify メソッドを呼び出して初期化し、AddSettingChangeNotify メソッドを呼び出してウィンドウを登録します。
不要になった時点で RemoveSettingChangeNotify メソッドを呼び出してウィンドウの登録を解除し、TermSettingChangeNotify メソッドを呼び出す必要があります。
このクラスにおける Windows の設定変更の通知の実装は以下のようになっています。

InitSettingChangeNotify メソッドでは、WM_SETTINGCHANGE メッセージを受け取るためにダイアログを作成します。
ダイアログに WM_SETTINGCHANGE メッセージが送信されたら、登録されているウィンドウに対して同じ内容の WM_SETTINGCHANGE メッセージを送信します。
このときの送信は SendMessageTimeout API を呼び出すことにより行われ、そのタイムアウトは 1,500 ミリ秒です。

参照

CMessageLoop
CServerAppModule

情報

タイプ : クラス
継承クラス : ATL::CComModule
ヘッダ : atlapp.h

メンバ

DWORD m_dwMainThreadID;
メイン スレッドの ID です。
ATL::CSimpleMap<DWORD, CMessageLoop*>* m_pMsgLoopMap;
スレッド ID をキーとしたメッセージ ループ オブジェクトのマップです。
ATL::CSimpleArray<HWND>* m_pSettingChangeNotify;
Windows の設定変更の通知を受け取るウィンドウのハンドルの配列です。

静的メソッド

_SettingChangeDlgProc
設定変更の通知を受け取るダイアログのプロシージャです。

メソッド

AddMessageLoop
メッセージ ループを登録します。
AddSettingChangeNotify
Windows の設定変更の通知を受け取るウィンドウを登録します。
GetMessageLoop
メッセージ ループ オブジェクトを取得します。
Init
モジュールの初期化処理を行います。
InitSettingChangeNotify
Windows の設定変更の通知の初期化処理を行います。
RemoveMessageLoop
メッセージ ループの登録を解除します。
RemoveSettingChangeNotify
Windows の設定変更の通知を受け取るウィンドウの登録を解除します。
Term
モジュールの終了処理を行います。
TermSettingChangeNotify
Windows の設定変更の通知の終了処理を行います。


_SettingChangeDlgProc

設定変更の通知を受け取るダイアログのプロシージャです。

static BOOL CALLBACK _SettingChangeDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

引数

HWND hWnd
ウィンドウ ハンドルです。

UINT uMsg
送信された、またはポストされたメッセージです。

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

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

戻り値

独自の処理を行ったかどうかを返します。

解説

このプロシージャでは、WM_SETTINGCHANGE メッセージについてのみ独自の処理を行います。


AddMessageLoop

メッセージ ループを登録します。

BOOL AddMessageLoop(CMessageLoop* pMsgLoop);

引数

CMessageLoop* pMsgLoop
登録するメッセージ ループを指定します。

戻り値

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


AddSettingChangeNotify

Windows の設定変更の通知を受け取るウィンドウを登録します。

BOOL AddSettingChangeNotify(HWND hWnd);

引数

HWND hWnd
登録するウィンドウを指定します。

戻り値

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


GetMessageLoop

メッセージ ループ オブジェクトを取得します。

CMessageLoop* GetMessageLoop(DWORD dwThreadID = ::GetCurrentThreadId()) const;

引数

DWORD dwThreadID = ::GetCurrentThreadId()
スレッド ID を指定します。既定ではカレント スレッドの ID です。

戻り値

指定したスレッド ID に対応したメッセージ ループ オブジェクトを返します。


Init

モジュールの初期化処理を行います。

HRESULT Init(ATL::_ATL_OBJMAP_ENTRY* pObjMap, HINSTANCE hInstance, const GUID* pLibID = NULL);

引数

ATL::_ATL_OBJMAP_ENTRY* pObjMap
オブジェクト マップの配列を指定します。NULL を指定することができます。

HINSTANCE hInstance
インスタンス ハンドルを指定します。

const GUID* pLibID = NULL
ライブラリ ID を指定します。既定では NULL です。

戻り値

初期化処理に成功したかどうかを返します。


InitSettingChangeNotify

Windows の設定変更の通知の初期化処理を行います。

BOOL InitSettingChangeNotify(DLGPROC pfnDlgProc = _SettingChangeDlgProc);

引数

DLGPROC pfnDlgProc = _SettingChangeDlgProc
ダイアログ プロシージャを指定します。既定ではこのクラスで実装されている _SettingChangeDlgProc プロシージャです。

戻り値

初期化処理に成功したかどうかを返します。

解説

MSDI (マルチスレッド SDI) アプリケーションでは、このメソッドをメイン スレッドから呼び出してください。


RemoveMessageLoop

メッセージ ループの登録を解除します。

BOOL RemoveMessageLoop();

引数

引数はありません。

戻り値

登録の解除に成功したかどうかを返します。

解説

このメソッドは、カレント スレッドの ID に対応するメッセージ ループの登録を解除します。


RemoveSettingChangeNotify

Windows の設定変更の通知を受け取るウィンドウの登録を解除します。

BOOL RemoveSettingChangeNotify(HWND hWnd);

引数

HWND hWnd
登録を解除するウィンドウを指定します。

戻り値

登録の解除に成功したかどうかを返します。


Term

モジュールの終了処理を行います。

void Term();

引数

引数はありません。

戻り値

戻り値はありません。


TermSettingChangeNotify

Windows の設定変更の通知の終了処理を行います。

void TermSettingChangeNotify();

引数

引数はありません。

戻り値

戻り値はありません。


Last Modified : 2010/03/01 (Mon.) 18:01:44

Librarian Version 0.3.1.5
By Toshi

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

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