次の方法で共有


MFC ActiveX コントロール : ActiveX コントロールへのストック イベントの追加

ストック イベントは、COleControl クラスによって自動的に発生させられるという点で、カスタム イベントとは異なります。 COleControl には、一般的な動作に応じてイベントを発生させる定義済みのメンバー関数があります。 COleControl によって実装される一般的な動作には、たとえば、コントロールのシングル クリックやダブルクリック、キーボード イベント、マウス ボタンの状態の変化などがあります。 イベント マップのストック イベントのエントリには、必ず EVENT_STOCK というプリフィックスが付きます。

イベント追加 ウィザードでサポートされているストック イベント

COleControl クラスには、次の表に示す 10 のストック イベントが用意されています。 コントロールに必要なイベントを指定するには、イベント追加 ウィザードを使用します。

ストック イベント

イベント

発生させる関数

説明

クリックする場所

void FireClick( )

コントロールがマウスをキャプチャしたとき、BUTTONUP (左、中央、または右) メッセージを受け取ったとき、およびコントロール上でボタンが離されたときに発生します。 このイベントの前に、ストック イベントの MouseDown および MouseUp が発生します。

イベント マップ エントリ:EVENT_STOCK_CLICK)

DblClick

void FireDblClick( )

Click に似ていますが、BUTTONDBLCLK メッセージを受け取ったときに発生します。

イベント マップ エントリ:EVENT_STOCK_DBLCLICK)

Error

void FireError( SCODE scode, LPCSTR lpszDescription, UINT nHelpID = 0 )

メソッドの呼び出しまたはプロパティのアクセスのスコープ外の ActiveX コントロール内でエラーが起こると発生します。

イベント マップ エントリ:EVENT_STOCK_ERROREVENT)

KeyDown

void FireKeyDown( short nChar, short nShiftState )

WM_SYSKEYDOWN メッセージまたは WM_KEYDOWN メッセージを受け取ると発生します。

イベント マップ エントリ:EVENT_STOCK_KEYDOWN)

KeyPress

void FireKeyPress( short* pnChar )

WM_CHAR メッセージを受け取ると発生します。

イベント マップ エントリ:EVENT_STOCK_KEYPRESS)

KeyUp

void FireKeyUp( short nChar, short nShiftState )

WM_SYSKEYUP メッセージまたは WM_KEYUP メッセージを受け取ると発生します。

イベント マップ エントリ:EVENT_STOCK_KEYUP)

MouseDown

void FireMouseDown( short nButton, short nShiftState, float x, float y )

BUTTONDOWN (左、中央、または右) メッセージを受け取ると発生します。 マウスをキャプチャした直後に発生するイベントです。

イベント マップ エントリ:EVENT_STOCK_MOUSEDOWN)

MouseMove

void FireMouseMove( short nButton, short nShiftState, float x, float y )

WM_MOUSEMOVE メッセージを受け取ると発生します。

イベント マップ エントリ:EVENT_STOCK_MOUSEMOVE)

MouseUp

void FireMouseUp( short nButton, short nShiftState, float x, float y )

BUTTONUP (左、中央、または右) メッセージを受け取ると発生します。 マウスのキャプチャを解放した後に発生するイベントです。

イベント マップ エントリ:EVENT_STOCK_MOUSEUP)

ReadyStateChange

void FireReadyStateChange( )

既定データ量の受信後にコントロールが次の待機状態になると発生します。

イベント マップ エントリ:EVENT_STOCK_READYSTATECHANGE)

イベント追加 ウィザードによるストック イベントの追加

ストック イベントの追加は、実際のイベントの発生が基本クラスの COleControl によって自動的に処理されるため、カスタム イベントに比べて簡単です。 次の手順では、MFC ActiveX コントロール ウィザードを使って作成したコントロールに、ストック イベントを追加します。 追加するイベントは、KeyPress という名前であり、キーが押されてコントロールがアクティブになると発生します。 この手順は、ほかのストック イベントを追加するときにも使用できます。 その場合は、KeyPress を目的のストック イベントの名前と置き換えます。

イベント追加 ウィザードを使って KeyPress ストック イベントを追加するには

  1. コントロールのプロジェクトを読み込みます。

  2. [クラス ビュー] ウィンドウで、ActiveX コントロール クラスを右クリックし、ショートカット メニューを開きます。

  3. ショートカット メニューの [追加] をクリックし、[イベントの追加] をクリックします。

    これにより、イベント追加 ウィザードが開きます。

  4. [イベント名] ボックスの一覧の [KeyPress] をクリックします。

  5. [完了] をクリックします。

ストック イベントの追加に伴うイベント追加 ウィザードによる変更

ストック イベントはコントロールの基本クラスによって処理されるため、イベント追加 ウィザードがクラス宣言を変更することはありません。 イベント追加 ウィザードは、コントロールのイベント マップにイベントを追加し、.IDL ファイルにエントリを作成します。 コントロール クラスの実装 (.CPP) ファイル内にあるコントロールのイベント マップに、次の行が追加されます。

EVENT_STOCK_KEYPRESS()

このコードを追加すると、WM_CHAR メッセージを受け取ってコントロールがアクティブになったときに KeyPress イベントが発生します。 これ以外の状況で KeyPress イベントを発生させることもできます。その場合は、KeyPress イベントを発生させる関数 (FireKeyPress など) をコントロールのコードの中で呼び出します。

イベント追加 ウィザードは、次のコード行をコントロールの .IDL ファイルに追加します。

[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);

この行によって、KeyPress イベントが標準のディスパッチ ID に関連付けられるため、コンテナーが KeyPress イベントに対応できるようになります。

参照

参照

COleControl クラス

概念

MFC ActiveX コントロール

MFC ActiveX コントロール : メソッド