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

更新 : 2007 年 11 月

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

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

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

ストック イベント

イベント

発生させる関数

説明

Click

void FireClick( )

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

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

DblClick

void FireDblClick( )

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

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

Error

void FireError( SCODEscode, LPCSTRlpszDescription, UINTnHelpID = 0 )

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

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

KeyDown

void FireKeyDown( shortnChar, shortnShiftState )

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

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

KeyPress

void FireKeyPress( short*pnChar )

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

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

KeyUp

void FireKeyUp( shortnChar, shortnShiftState )

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

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

MouseDown

void FireMouseDown( shortnButton, shortnShiftState, floatx, floaty )

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

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

MouseMove

void FireMouseMove( shortnButton, shortnShiftState, floatx, floaty )

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

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

MouseUp

void FireMouseUp( shortnButton, shortnShiftState, floatx, floaty )

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 イベントに対応できるようになります。

参照

概念

MFC ActiveX コントロール

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

参照

COleControl クラス