次の方法で共有


CoSetMessageDispatcher 関数 (messagedispatcherapi.h)

ASTA スレッド上の COM 待機 API 内でディスパッチ可能なウィンドウ メッセージがある場合に呼び出されるスレッドごとのメッセージ ディスパッチャーを登録または登録解除します。 この関数は通常 CoreWindow によって呼び出されますが、特定の状況では、ASTA スレッドでメッセージをディスパッチする方法を専門にする必要がある他のコンポーネントでも、この関数を呼び出すことができます。

構文

void CoSetMessageDispatcher(
  [in, optional] PMessageDispatcher pMessageDispatcher
);

パラメーター

[in, optional] pMessageDispatcher

null 以外の場合は、登録するメッセージ ディスパッチャー オブジェクト。 このオブジェクトは 、IWeakReferenceSource も実装する必要があります。 null の場合、現在のメッセージ ディスパッチャーの登録を解除します。

戻り値

この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。

解説

この関数は ASTA スレッドでのみサポートされます。 ASTA 以外のスレッドでメッセージ ディスパッチャーを設定しようとすると、副作用なしでサイレントモードで失敗します。

IWeakReferenceSource を実装していないオブジェクトをサイレントモードで設定しようとすると、副作用なしで失敗します。

有効で null 以外の pMessageDispatcher パラメーターを使用してこの関数を呼び出すと、このオブジェクトは、その ASTA スレッドで COM 待機 API を使用してディスパッチできるウィンドウ メッセージがある場合に常に 、PumpMessages コールバックを受け取るように登録されます。 このオブジェクトへの弱い参照Windows 运行时保持され、登録が置き換えられるか ASTA が初期化されていないまで、オブジェクトはコールバックを受け取ります。 この関数を呼び出すたびに、以前に登録されたメッセージ ディスパッチャー (存在する場合) が置き換えられます。

メッセージ ディスパッチャーが ASTA スレッドに登録されている場合や、以前に登録したメッセージ ディスパッチャーを取得する場合にチェックする方法はありません。 この関数は、これが別の登録と競合しないことがわかっている状況でのみ呼び出す必要があります。具体的には次のとおりです。

  • Windows ストア アプリの UI スレッドでは、この関数は、ディスパッチャーを登録するために CoreWindow によって呼び出されます。 他のコンポーネントでは、これらのスレッドでこの関数を呼び出す必要はありません。
  • UI フレームワークでは、作成モードがサポートされている場合があります。このモードでは、アプリケーションはデスクトップ環境で実行されるため、UI スレッドに CoreWindow はありません。 CoreWindow のサポートの代わりに、これらの UI フレームワークは、通常 CoreWindow によって処理される特別なウィンドウ メッセージ処理 (アクセラレータなど) を処理するために、UI スレッドにメッセージ ディスパッチャーを登録する場合があります。 UI フレームワークにこの機能が必要ない場合は、この関数を呼び出す必要はありません。
  • IAppVisibility ブラウザーは Windows ストア アプリ API に制限されないため、user32 API を使用して独自のカスタム ウィンドウ メッセージ処理を行う場合があります。 ただし、これらのアプリケーションには、アプリ オブジェクトによって提供される ASTA UI スレッドが残っており、この特別な処理を処理するメッセージ ディスパッチャーを登録できます。 ブラウザーでこの機能が必要ない場合は、この関数を呼び出す必要はありません。
IAppVisibility ブラウザーの場合は、ブラウザーのメッセージ ディスパッチャーを置き換える CoreWindow を避けるために注意が必要です。 ブラウザーに CoreWindow のディスパッチャーは必要ないと想定されています。 ブラウザーは、IViewProvider::Initialize よりも早く CoSetMessageDispatcher を呼び出す必要があります。または、IInitializeWithWindowFactory を実装するビューの場合は、スレッドにウィンドウを作成した後より早く呼び出す必要があります。

必要条件

   
対象プラットフォーム Windows
ヘッダー messagedispatcherapi.h

関連項目

IAppVisibility