CMessageLoop

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

説明

メッセージ ループをカプセル化しているクラスです。

解説

CAppModule クラスの AddMessageLoop メソッドを呼び出してメッセージ ループをモジュールに登録し、このクラスの Run メソッドを呼び出すことで、メッセージ ループが開始されます。
メッセージ ループでは、CIdleHandler クラスによるアイドル ハンドラ、および CMessageFilter クラスによるメッセージのフィルタリングが実行されます。
Run メソッドの具体的な実装は以下のようになっています。

・アイドル ハンドラの実行
メッセージ ループで処理するメッセージが存在しない、つまりアイドル状態である場合は、OnIdle メソッドが呼び出されます。ここでは、AddIdleHandler メソッドによって登録されたアイドル ハンドラの OnIdle メソッドを呼び出します。
アイドル ハンドラの OnIdle メソッドの実行が終了し、このクラスの OnIdle メソッドが TRUE を返した場合、メッセージ ループに戻ることなくアイドル ハンドラの実行が継続されますが、既定の実装では、アイドル ハンドラの OnIdle メソッドの戻り値を無視して常に FALSE を返し、メッセージ ループの実行へ戻ります。
このメソッドをオーバーライドすることで、アイドル ハンドラの OnIdle メソッドの戻り値によってアイドル ハンドラの実行を継続させたり、メッセージ ループの実行に戻ったりといった制御を任意に行うことが可能になります。

・メッセージのフィルタリング
TranslateMessage API および DispatchMessage API を呼び出す前に、PreTranslateMessage メソッドが呼び出されます。ここでは、AddMessageFilter メソッドによって登録されたメッセージ フィルタの PreTranslateMessage メソッドを呼び出します。PreTranslateMessage メソッドの既定の実装では、FALSE が返された場合、そのメッセージが処理されなかったことを示すため、通常通り TranslateMessage API および DispatchMessage API を呼び出します。TRUE が返された場合、そのメッセージが処理されたことを示すため、これらの API を呼び出しません。

メッセージ フィルタ、およびアイドル ハンドラは複数登録することができます。
メッセージ フィルタが複数登録された場合、登録された順に PreTranslateMessage メソッドが呼び出されます。
既定の実装では、そのうち一つでも TRUE を返した場合、即座に PreTranslateMessage メソッドが TRUE を返すようになっています。
アイドル ハンドラが複数登録された場合、既定の実装では、登録された順にすべての OnIdle メソッドが呼び出されます。

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

参照

CAppModule
CIdleHandler
CMessageFilter

情報

タイプ : クラス
継承クラス : なし
ヘッダ : atlapp.h

メンバ

ATL::CSimpleArray<CMessageFilter*> m_aMsgFilter;
登録されているメッセージ フィルタの配列です。
ATL::CSimpleArray<CIdleHandler*> m_aIdleHandler;
登録されているアイドル ハンドラの配列です。
MSG m_msg;
処理されるメッセージです。

メソッド

AddIdleHandler
アイドル ハンドラを登録します。
AddMessageFilter
メッセージ フィルタを登録します。
AddUpdateUI
UI 更新ハンドラを登録します。
IsIdleMessage
指定したメッセージがアイドル メッセージかどうかを調べます。
OnIdle
アイドル時の処理を行います。
PreTranslateMessage
メッセージのフィルタリングを行います。
RemoveIdleHandler
アイドル ハンドラの登録を解除します。
RemoveMessageFilter
メッセージ フィルタの登録を解除します。
RemoveUpdateUI
UI 更新ハンドラの登録を解除します。
Run
メッセージ ループを開始します。


AddIdleHandler

アイドル ハンドラを登録します。

BOOL AddIdleHandler(CIdleHandler* pIdleHandler);

引数

CIdleHandler* pIdleHandler
登録するアイドル ハンドラを指定します。

戻り値

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


AddMessageFilter

メッセージ フィルタを登録します。

BOOL AddMessageFilter(CMessageFilter* pMessageFilter);

引数

CMessageFilter* pMessageFilter
登録するメッセージ フィルタを指定します。

戻り値

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


AddUpdateUI

UI 更新ハンドラを登録します。

BOOL AddUpdateUI(CIdleHandler* pIdleHandler);

引数

CIdleHandler* pIdleHandler
登録する UI 更新ハンドラを指定します。

戻り値

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

解説

このメソッドの使用は推奨されません。代わりに AddIdleHandler メソッドを使用してください。


IsIdleMessage

指定したメッセージがアイドル メッセージかどうかを調べます。

static BOOL IsIdleMessage(MSG* pMsg);

引数

MSG* pMsg
MSG 構造体を指定します。

戻り値

アイドル メッセージであるかどうかを返します。

解説

アイドル メッセージではないと判断されるメッセージは、WM_MOUSEMOVE、WM_NCMOUSEMOVE、WM_PAINT、および WM_SYSTIMER です。


OnIdle

アイドル時の処理を行います。

virtual BOOL OnIdle(int /*nIdleCount*/);

引数

int /*nIdleCount*/
アイドル状態になった回数を指定します。

戻り値

アイドル状態が継続しているかどうかを返します。

解説

このメソッドの既定の実装では、常に FALSE を返します。


PreTranslateMessage

メッセージのフィルタリングを行います。

virtual BOOL PreTranslateMessage(MSG* pMsg);

引数

MSG* pMsg
MSG 構造体を指定します。

戻り値

メッセージが処理されたかどうかを返します。


RemoveIdleHandler

アイドル ハンドラの登録を解除します。

BOOL RemoveIdleHandler(CIdleHandler* pIdleHandler);

引数

CIdleHandler* pIdleHandler
登録を解除するアイドル ハンドラを指定します。

戻り値

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


RemoveMessageFilter

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

BOOL RemoveMessageFilter(CMessageFilter* pMessageFilter);

引数

CMessageFilter* pMessageFilter
登録を解除するメッセージ フィルタを指定します。

戻り値

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


RemoveUpdateUI

UI 更新ハンドラの登録を解除します。

BOOL RemoveUpdateUI(CIdleHandler* pIdleHandler);

引数

CIdleHandler* pIdleHandler
登録を解除する UI 更新ハンドラを指定します。

戻り値

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

解説

このメソッドの使用は推奨されません。代わりに RemoveIdleHandler メソッドを使用してください。


Run

メッセージ ループを開始します。

int Run();

引数

引数はありません。

戻り値

m_msg メンバの wParam メンバを返します。


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

Librarian Version 0.3.1.5
By Toshi

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

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