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 ストック イベントを追加するには
コントロールのプロジェクトを読み込みます。
[クラス ビュー] ウィンドウで、ActiveX コントロール クラスを右クリックし、ショートカット メニューを開きます。
ショートカット メニューの [追加] をクリックし、[イベントの追加] をクリックします。
これにより、イベント追加 ウィザードが開きます。
[イベント名] ボックスの一覧の [KeyPress] をクリックします。
[完了] をクリックします。
ストック イベントの追加に伴うイベント追加 ウィザードによる変更
ストック イベントはコントロールの基本クラスによって処理されるため、イベント追加 ウィザードがクラス宣言を変更することはありません。 イベント追加 ウィザードは、コントロールのイベント マップにイベントを追加し、.IDL ファイルにエントリを作成します。 コントロール クラスの実装 (.CPP) ファイル内にあるコントロールのイベント マップに、次の行が追加されます。
EVENT_STOCK_KEYPRESS()
このコードを追加すると、WM_CHAR メッセージを受け取ってコントロールがアクティブになったときに KeyPress イベントが発生します。 これ以外の状況で KeyPress イベントを発生させることもできます。その場合は、KeyPress イベントを発生させる関数 (FireKeyPress など) をコントロールのコードの中で呼び出します。
イベント追加 ウィザードは、次のコード行をコントロールの .IDL ファイルに追加します。
[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);
この行によって、KeyPress イベントが標準のディスパッチ ID に関連付けられるため、コンテナーが KeyPress イベントに対応できるようになります。