次の方法で共有


MFC ActiveX コントロール : カスタム イベントの追加

カスタム イベントは、ストック イベントと COleControlクラスによって自動的に発生しないことです。 カスタム イベントは、イベントとして、コントロールの開発者によって、指定された特定のアクションを認識します。 カスタム イベントのイベント マップ エントリは EVENT_CUSTOM マクロによって表されます。 以下のセクションでは、ActiveX コントロール ウィザードを使用して作成された ActiveX コントロール プロジェクトのカスタム イベントを実装します。

イベント追加ウィザードで Custom Event の追加

次の手順では、特定のカスタム イベント、ClickIn を追加します。 他のカスタム イベントを追加するには、次の手順を使用します。 ClickIn イベント名とパラメーターのカスタム イベント名およびパラメーターに置き換えてください。

ClickIn のカスタム イベントをイベント追加ウィザードを追加するには

  1. コントロールのプロジェクトを読み込んでください。

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

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

    これは、イベント追加ウィザードを開きます。

  4. イベント名 ボックスで、まず既存のイベントを選択し、[カスタム] のオプション ボタン、型 ClickInをクリックします。

  5. 内部名 ボックスで、イベント起動関数の名前を入力します。 この例では、イベント追加ウィザード (FireClickIn) によって提供される既定値を使用します。

  6. パラメータ名パラメータの種類 のコントロールを使用して xCoord (型 OLE_XPOS_PIXELS) というパラメーターを追加します。

  7. yCoord (型 OLE_YPOS_PIXELS) という 2 番目のパラメーターを追加します。

  8. イベントをクリック 完了

カスタム イベントのイベント ウィザードの変更を追加します。

カスタム イベントを追加するときは、イベント追加ウィザードでは、コントロール クラスを変更します。ただし、.cpp ファイルと .IDL ファイル。 次のコード サンプルは ClickIn イベントに固有です。

以下は、ヘッダーに追加されます。H) コントロール クラス ファイル:

void FireClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord)
{
   FireEvent(eventidClickIn, EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);
}

このコードは FireClickIn という名前のイベント追加ウィザードを使用して定義したパラメーターと ClickIn イベントの COleControl::FireEvent を呼び出すインライン関数を宣言します。

また、次の行は、コントロール クラス実装 (.cpp) ファイルにあるコントロールのイベント マップに追加します:

EVENT_CUSTOM_ID("ClickIn", eventidClickIn, FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)

このコードは、イベント追加ウィザードを使用して定義したパラメーターを渡すインライン関数 FireClickInにイベント ClickIn を割り当てます。

最後に、次の行は、コントロールの .IDL ファイルに追加します:

[id(1)] void ClickIn(OLE_XPOS_PIXELS xCoord, OLE_YPOS_PIXELS yCoord);

この行はイベント追加ウィザード イベント一覧イベントの位置にある特定の ID 番号 ClickIn イベントに割り当てます。 グラフィックス イベント一覧のエントリはコンテナーがイベントを予測できるようにします。 たとえば、イベントが発生したときに実行されるハンドラーのコードが実行されることがあります。

FireClickIn を呼び出します。

イベント追加ウィザードを使用して ClickIn のカスタム イベントを追加したので、このイベントがいつ発生するかを決定する必要があります。 FireClickIn を呼び出すことによって、これを行います。適切なアクションが発生したとき。 ここでは、コントロールは、ユーザーが循環または楕円領域内でクリックすると ClickIn イベントを発生させるために WM_LBUTTONDOWN のメッセージ ハンドラー内の InCircle 関数を使用します。 次の手順では WM_LBUTTONDOWN ハンドラーを追加します。

イベント追加ウィザードを使用してメッセージ ハンドラーを追加するには

  1. コントロールのプロジェクトを読み込んでください。

  2. クラス ビューで、ActiveX コントロール クラスを選択します。

  3. [プロパティ] ウィンドウの [メッセージ] をクリックします。

    プロパティ ウィンドウは ActiveX コントロールで処理することができるメッセージの一覧を表示します。 太字で示されているメッセージが既に、割り当てられたハンドラー関数があります。

  4. プロパティ ウィンドウで、処理したいメッセージを選択します。 この例では、WM_LBUTTONDOWNを選択します。

  5. 右側のドロップダウン リスト ボックスで、<Add> OnLButtonDownを選択します。

  6. ActiveX コントロールの実装 (.cpp) ファイルのメッセージ ハンドラー コードにジャンプするには、クラス ビューの new ハンドラー関数をダブルクリックします。

次のコード サンプルは、マウスの左ボタンがコントロール ウィンドウ内をクリックするたびに InCircle 関数を呼び出します。 このサンプルでは WM_LBUTTONDOWN のハンドラー関数、Circ のサンプル の抽象 OnLButtonDownに配置できます。

void CMyAxUICtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
   if (InCircle(point))
      FireClickIn(point.x, point.y);

    COleControl::OnLButtonDown(nFlags, point);
}

注意

イベント追加ウィザードがマウス ボタンの操作のメッセージ ハンドラーを作成する場合は、基本クラスの同じメッセージ ハンドラーの呼び出しが自動的に追加されます。この呼び出しは削除しないでください。コントロールの標準的なマウス メッセージを使用して、マウス キャプチャを適切に処理されるようにするために、基本クラスのメッセージ ハンドラーが問い合わせられなければ必要があります。

次の例では、コントロール内の循環または楕円領域内で発生するイベントの場合にのみ適用されます。 この動作を実現するためには、コントロールの実装 (.cpp) ファイルに InCircle 関数を設定すると、T:

VARIANT_BOOL CMyAxUICtrl::InCircle(CPoint& point)
{
    CRect rc;
    GetClientRect(rc);
    // Determine radii 
    double a = (rc.right - rc.left) / 2;
    double b = (rc.bottom - rc.top) / 2;

    // Determine x, y 
    double x = point.x - (rc.left + rc.right) / 2;
    double y = point.y - (rc.top + rc.bottom) / 2;

    // Apply ellipse formula 
    return ((x * x) / (a * a) + (y * y) / (b * b) <= 1);
}

またコントロールのヘッダーに InCircle 関数に対して次の宣言を追加する必要があります。H) ファイル:

VARIANT_BOOL InCircle(CPoint& point);

標準的な名前のカスタム イベント

同じコントロールの両方を実装できない大量のストック イベントと同じ名前のカスタム イベントを作成できます。 たとえば、ストック Click イベントは、通常、いつ発生するかクリック発生させるという名前のカスタム イベントを作成する場合があります。 raise 関数を呼び出すことにより、クリック イベントをいつでも実行できます。

次の手順では、カスタムのクリック イベントを追加します。

ストック イベントの名前を使用するカスタム イベントを追加するには

  1. コントロールのプロジェクトを読み込んでください。

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

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

    これは、イベント追加ウィザードを開きます。

  4. イベント名 のドロップダウン リストで、ストック イベントの名前を選択します。 この例では、クリックを選択します。

  5. イベントの種類では、カスタムを選択します。

  6. イベントをクリック 完了

  7. コード内の適切な場所に FireClick を呼び出します。

参照

関連項目

COleControl クラス

概念

MFC ActiveX コントロール

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