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