イベント マップ
コントロールは、(コントロール開発者によって決定される) 何らかのアクション (キーストローク、マウス クリック、コントロールの状態の変更など) が発生したことをコンテナーに通知するたびに、イベント発生関数を呼び出します。 この関数は、関連するイベントを発生させて重要なアクションが発生したことを制御コンテナーに通知します。
Microsoft Foundation クラス ライブラリには、イベントを発生させるために最適化されたプログラミング モデルが用意されています。 このモデルでは、"イベント マップ" を使用して、特定のコントロールのイベントを発生させる関数を指定します。 イベント マップには、イベントごとに 1 つのマクロが含まれています。 たとえば、ストック クリック イベントを発生するイベント マップは次のようになります。
BEGIN_EVENT_MAP(CMyAxCtrl, COleControl)
EVENT_STOCK_CLICK()
END_EVENT_MAP()
EVENT_STOCK_CLICK
マクロは、コントロールがマウス クリックを検出するたびにストック クリック イベントを発生することを示します。 その他のストック イベントの詳細については、「 ActiveX Controls: Events」を参照してください。 マクロは、カスタム イベントを示すためにも使用できます。
イベント マップ マクロは重要ですが、通常は直接挿入しません。 これは、 Properties ウィンドウ ( クラス ビュー) を使用してイベント発生関数をイベントに関連付けると、ソース ファイルにイベント マップ エントリが自動的に作成されるためです。 イベント マップ エントリを編集または追加する場合は、いつでも Properties ウィンドウを使用できます。
イベント マップをサポートするために、MFC には次のマクロが用意されています。
イベント マップ マクロ
イベント マップの宣言と区分
名前 | 説明 |
---|---|
DECLARE_EVENT_MAP | イベントをイベント発生関数にマップするために、イベント マップをクラスで使用することを宣言します (クラス宣言で使用する必要があります)。 |
BEGIN_EVENT_MAP | イベント マップの定義を開始します (クラス実装で使用する必要があります)。 |
END_EVENT_MAP | イベント マップの定義を終了します (クラス実装で使用する必要があります)。 |
イベント マッピング マクロ
名前 | 説明 |
---|---|
EVENT_CUSTOM | 指定したイベントを発生させるイベント発生関数を示します。 |
EVENT_CUSTOM_ID | 指定されたディスパッチ ID を使用して、指定したイベントを発生させるイベント発生関数を示します。 |
メッセージ マッピング マクロ
名前 | 説明 |
---|---|
ON_OLEVERB | OLE コントロールによって処理されるカスタム動詞を示します。 |
ON_STDOLEVERB | OLE コントロールの標準動詞マッピングをオーバーライドします。 |
DECLARE_EVENT_MAP
プログラム内の各 COleControl
派生クラスは、コントロールが起動するイベントを指定するイベント マップを提供できます。
DECLARE_EVENT_MAP()
解説
クラス宣言の最後に DECLARE_EVENT_MAP マクロを使用します。 次に、クラスのメンバー関数を定義する.cpp ファイルで、BEGIN_EVENT_MAP マクロ、コントロールの各イベントのマクロ エントリ、およびイベント リストの末尾を宣言するEND_EVENT_MAP マクロを使用します。
イベント マップの詳細については、「 ActiveX コントロール: イベント」を参照してください。
要件
Header afxctl.h
BEGIN_EVENT_MAP
イベント マップの定義を開始します。
BEGIN_EVENT_MAP(theClass, baseClass)
パラメーター
theClass
イベント マップを持つコントロール クラスの名前を指定します。
baseClass
クラスの基底クラスの名前を指定します。
解説
クラスのメンバー関数を定義する実装 (.cpp) ファイルで、BEGIN_EVENT_MAP マクロを使用してイベント マップを開始し、各イベントのマクロ エントリを追加し、END_EVENT_MAP マクロを使用してイベント マップを完成させます。
イベント マップと BEGIN_EVENT_MAP マクロの詳細については、「 ActiveX Controls: Events」を参照してください。
要件
Header afxctl.h
END_EVENT_MAP
END_EVENT_MAP マクロを使用して、イベント マップの定義を終了します。
END_EVENT_MAP()
要件
Header afxctl.h
EVENT_CUSTOM
カスタム イベントのイベント マップ エントリを定義します。
EVENT_CUSTOM(pszName, pfnFire, vtsParams)
パラメーター
pszName
イベントの名前です。
pfnFire
イベント発生関数の名前。
vtsParams
関数のパラメーター リストを指定する 1 つ以上の定数のスペース区切りのリスト。
解説
vtsParams パラメーターは、VTS_
定数の値のスペース区切りのリストです。 これらの値の 1 つ以上をスペース (コンマではなく) で区切って指定すると、関数のパラメーター リストが指定されます。 次に例を示します。
VTS_COLOR VTS_FONT
は、RGB カラー値を表す 32 ビット整数を含むリストと、OLE フォント オブジェクトの IFontDisp
インターフェイスへのポインターを指定します。
VTS_
定数とその意味は次のとおりです。
記号 | パラメーターのタイプ |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_COLOR | OLE_COLOR |
VTS_CY | CURRENCY |
VTS_DATE | DATE |
VTS_BSTR | const char* |
VTS_DISPATCH | LPDISPATCH |
VTS_FONT | IFontDispatch* |
VTS_HANDLE | HANDLE |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* |
VTS_PVARIANT | VARIANT* |
VTS_UNKNOWN | LPUNKNOWN |
VTS_OPTEXCLUSIVE | OLE_OPTEXCLUSIVE |
VTS_PICTURE | IPictureDisp* |
VTS_TRISTATE | OLE_TRISTATE |
VTS_XPOS_PIXELS | OLE_XPOS_PIXELS |
VTS_YPOS_PIXELS | OLE_YPOS_PIXELS |
VTS_XSIZE_PIXELS | OLE_XSIZE_PIXELS |
VTS_YSIZE_PIXELS | OLE_YSIZE_PIXELS |
TS_XPOS_HIMETRIC | OLE_XPOS_HIMETRIC |
VTS_YPOS_HIMETRIC | OLE_YPOS_HIMETRIC |
VTS_XSIZE_HIMETRIC | OLE_XSIZE_HIMETRIC |
VTS_YSIZE_HIMETRIC | OLE_YSIZE_HIMETRIC |
Note
バリアント データ定数へのポインターを提供するVTS_FONTとVTS_PICTUREを除き、すべてのバリアント型に対して追加のバリアント定数が定義されています。 これらの定数には、 VTS_Pconstantname
規則を使用して名前が付けられます。 たとえば、VTS_PCOLORはVTS_COLOR定数へのポインターです。
要件
Header afxctl.h
EVENT_CUSTOM_ID
dispidで指定されたディスパッチ ID に属するカスタム イベントのイベント発生関数を定義します。
EVENT_CUSTOM_ID(
pszName,
dispid,
pfnFire,
vtsParams)
パラメーター
pszName
イベントの名前です。
dispid
イベントの発生時にコントロールによって使用されるディスパッチ ID。
pfnFire
イベント発生関数の名前。
vtsParams
イベントが発生したときにコントロール コンテナーに渡されるパラメーターの変数リスト。
解説
引数 vtsParams は、 VTS_
定数の値のスペース区切りのリストです。 これらの値の 1 つ以上をコンマではなくスペースで区切って指定すると、関数のパラメーター リストが指定されます。 次に例を示します。
VTS_COLOR VTS_FONT
は、RGB カラー値を表す 32 ビット整数を含むリストと、OLE フォント オブジェクトの IFontDisp
インターフェイスへのポインターを指定します。
VTS_
定数の一覧については、「EVENT_CUSTOM」を参照してください。
要件
Header afxctl.h
ON_OLEVERB
このマクロは、カスタム動詞をコントロールの特定のメンバー関数にマップするメッセージ マップ エントリを定義します。
ON_OLEVERB(idsVerbName, memberFxn)
パラメーター
idsVerbName
動詞の名前の文字列リソース ID。
memberFxn
動詞が呼び出されたときにフレームワークによって呼び出される関数。
解説
リソース エディターを使用して、文字列テーブルに追加されるカスタム動詞名を作成できます。
memberFxn の関数プロトタイプは次のとおりです。
BOOL memberFxn(
LPMSG lpMsg,
HWND hWndParent,
LPCRECT lpRect);
lpMsg、hWndParent、および lpRect パラメーターの値は、IOleObject::DoVerb
メンバー関数の対応するパラメーターから取得されます。
要件
Header afxole.h
ON_STDOLEVERB
標準動詞の既定の動作をオーバーライドするには、このマクロを使用します。
ON_STDOLEVERB(iVerb, memberFxn)
パラメーター
iVerb
オーバーライドされる動詞の標準動詞インデックス。
memberFxn
動詞が呼び出されたときにフレームワークによって呼び出される関数。
解説
標準動詞インデックスは、 OLEIVERB_
形式の後にアクションが続きます。 OLEIVERB_SHOW、OLEIVERB_HIDE、およびOLEIVERB_UIACTIVATEは、標準動詞の例です。
memberFxn パラメーターとして使用する関数プロトタイプの説明については、ON_OLEVERBを参照してください。
要件
Header afxole.h