次の方法で共有


IOleInPlaceFrame::TranslateAccelerator メソッド (oleidl.h)

オブジェクトが所定の位置でアクティブになっている間に、コンテナーのフレーム用のアクセラレータ キーストロークを変換します。

構文

HRESULT TranslateAccelerator(
  [in] LPMSG lpmsg,
  [in] WORD  wID
);

パラメーター

[in] lpmsg

キーストローク メッセージを含む MSG 構造体へのポインター。

[in] wID

コンテナー指定のアクセラレータ テーブルのキーストロークに対応するコマンド識別子の値。 コンテナーでは、もう一度変換するのではなく、この値を使用する必要があります。

戻り値

このメソッドは、成功したS_OKを返します。 その他の可能な戻り値は次のとおりです。

リターン コード 説明
S_FALSE
キーストロークは使用されませんでした。
E_INVALIDARG
指定されたポインターが無効です。
E_UNEXPECTED
予期しないエラーが発生しました。

解説

呼び出し元へのメモ

コンテナー (フレーム) 用のキーストローク アクセラレータを受信すると、 IOleInPlaceFrame::TranslateAccelerator メソッドは OleTranslateAccelerator によって間接的に呼び出されます。

実装者へのメモ

コンテナー アプリケーションは、通常のアクセラレータ処理を実行するか、 wID を 直接使用して、キーストローク アクセラレータが処理されたかどうかを示す を返す必要があります。 コンテナーが MDI アプリケーションであり、 TranslateAccelerator 関数が失敗した場合、コンテナーは通常のメッセージ処理と同様に TranslateMDISysAccel 関数を呼び出すことができます。

インプレース オブジェクトには、最初にアクセラレータ メッセージを翻訳する機会を与える必要があります。 ただし、DLL オブジェクト アプリケーションによって実装されるオブジェクトには独自のメッセージ ポンプがないため、コンテナーのメッセージ キューからメッセージを受信します。 オブジェクトが最初にメッセージを翻訳する機会を確保するために、コンテナーは、独自のアクセラレータ変換を実行する前に、常に IOleInPlaceFrame::TranslateAccelerator を呼び出す必要があります。 逆に、実行可能オブジェクト アプリケーションでは、TranslateAccelerator を呼び出した後に OleTranslateAccelerator を呼び出し、両方の変換関数が失敗した場合にのみ TranslateMessageDispatchMessage を呼び出す必要があります。

コンテナーのアクセラレータ テーブルを定義して、独自のアクセラレータ キーストローク変換を行うオブジェクト アプリケーションで適切に動作するようにする必要があります。 テーブルは次のように定義する必要があります。

"char", wID, VIRTKEY, CONTROL

これは、キーボード アクセラレータを記述する最も一般的な方法です。 これを行わないと、インプレース セッション中にキーストロークが失われたり、間違ったオブジェクトに送信されたりする可能性があります。

要件

   
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー oleidl.h

関連項目

IOleInPlaceFrame

IOleInPlaceFrame::TranslateAccelerator

OleTranslateAccelerator

TranslateAccelerator

TranslateMDISysAccel