手順 5: イベントの追加

今あなたに追加されます、 ClickInClickOut イベントを ATL コントロール。火災は、 ClickIn 、多角形と火災で、ユーザーをクリックした場合のイベント ClickOut の外をクリックすると。

手順 2 で、フル コントロールを作成すると、選択したサポート接続ポイントチェック box.nbsp;作成した、 IPolyCtlEvents インターフェイスを .idl ファイルに。インターフェイス名をアンダー スコアで開始に注意してください。これは、インターフェイスは内部インターフェイスであることを示すのしきたりです。したがって、COM オブジェクトを参照するためのプログラム インターフェイスをユーザーに表示しないように選択できます。サポート接続ポイントことを示す行を追加することの通知、.idl ファイルでも IPolyCtlEvents 既定のソース インターフェイスです。ソース属性は、コンテナーでこのインターフェイスを呼び出すよう、コントロール ソース、通知のです。(&N)。

ClickIn と ClickOut メソッドに追加する必要があります今、 IPolyCtlEvents フェース:

  1. 右クリック IPolyCtlEvents クラス ビューで、ポップアップ メニューから選択して追加法

  2. 戻り値の型を選択します。void

  3. タイプ ClickIn [メソッド名] ボックスに。

  4. 入力 [in] long x, [in] long y [パラメーター ] ボックスに。

  5. [Ok]をクリックします。

方法として、コードが追加されたことを確認するには、.idl ファイルを確認、 IPolyCtlEvents dispinterface.nbsp;同じ手順を使用して定義するのには、 ClickOut メソッドと同じパラメーターと戻り値の型。IPolyCtlEvents のディスパッチ インターフェイスを .idl ファイルには次のようになります(&N):

ディスパッチ インターフェイス _IPolyCtlEvents{プロパティ:方法:[id(1)、helpstring ("メソッド ClickIn」)] ClickIn を無効 ([で] 長い [で] 長い y の x);[id(2)、helpstring (「メソッド ClickOut」)] 無効 ClickOut ([の] 長 x、[で] 長い y);}

ClickInClickOut メソッドは、x と y 座標にクリックされたポイントのパラメーターとして。

今、タイプ ライブラリを生成します。これを行うには、プロジェクトを再構築することができますまたはFileViewで .idl ファイルを右クリックしし、 Polygon.idl のコンパイル] をクリックします。これは、タイプ ライブラリにある Polygon.tlb ファイルを作成します。

次に、コネクション ポイント インターフェイスとコネクション ポイント コンテナー インターフェイス コントロールを実装します。(COM では、イベントのコネクション ポイント機構を通じて実装されます。COM オブジェクトからのイベントを受信するには、コンテナーに COM オブジェクトを実装するコネクション ポイントにアドバイザリ コネクションを確立します。COM オブジェクトが複数のコネクション ポイントを持つことができますので、COM オブジェクトは、接続ポイント コンテナー インターフェイスも実装します。このインターフェイスでは、コンテナー、接続ポイントがサポートされている判断できます。)コネクション ポイントを実装するインターフェイスIConnectionPointと呼ばれ、接続ポイント コンテナーを実装するインターフェイスIConnectionPointContainerと呼ばれる。

IConnectionPointを実装するのには、クラス ビューを使用して、接続ポイントのウィザードにアクセスします。このウィザードは、タイプ ライブラリを読み取り、解雇されることができる各イベント関数を実装するIConnectionPointインターフェイスを生成します。

ウィザードを実行するには、次の手順を実行します。:

  1. クラス ビューに移動 ([表示] メニューの [クラスを参照するには、ワークスペースをクリックします)。

  2. コントロールの実装クラスの場合は、この場合CPolyCtlを右クリックします。

  3. ショートカット メニューでは、実装の接続ポイントを選択します。

  4. [Ok]をクリックして、インタフェースのリストからの選択の _PolyEvents と、プロキシ クラスの接続ポイントがこのケースでは、CProxy_IPolyCtlEvents 生成されます。

FileViewで生成された PolygonCP.h ファイルを見て、あなたと呼ばれるクラスが CProxy_PolyCtlEventsIConnectionPointImplから派生します。PolygonCP.h 2 つのメソッドを定義します Fire_ClickInFire_ClickOut は、2 つの座標のパラメーターを取る。これらは、コントロールからイベントを発生させる場合、メソッドは。

ウィザードでは、 CProxy_PolyEventsIConnectionPointContainerImplも、コントロールの複数の継承 list.nbsp を追加;ウィザードもIConnectionPointContainerを COM マップに適切なエントリを追加して公開(&N)。

イベントをサポートするコードの実装は完了です。今、適切な時点で、イベントを発生させるコードを追加します。覚えて、発生している、 ClickIn または ClickOut 、ユーザー コントロールでマウスの左ボタンをクリックしたときのイベント。ユーザーがボタンをクリックするとを確認するには、まず、 WM_LBUTTONDOWNメッセージのハンドラを追加します。ClassViewで CPolyCtl クラスを右クリックし、 Windows メッセージ ハンドラーの追加... ] を選択、ショートカット menu.nbsp から;WM_LBUTTONDOWN左側のリストから選択して、ハンドラーの追加] ボタンをクリックします。[Ok]をクリックします(&N)。

次に、新しいコードを追加します (任意のコードは、ウィザードによって配置を削除) PolyCtl.h のOnLButtonDown関数にOnLButtonDown今はこのように見えるように:

LRESULT CPolyCtl::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOLamp; bHandled){HRGN hRgn;WORD xPos = loword (lparam);・水平カーソルの位置WORD yPos = HIWORD(lParam);//垂直カーソルの位置CalcPoints(m_rcPos);//私たちポイントの一覧から領域を作成hRgn = CreatePolygonRgn & m_arrPoint [0] ・ m_nSides、巻線);//私たちの多角形のクリックした点である場合は、ClickIn を火災//イベントそれ以外の場合は火災 ClickOut イベント場合 (PtInRegion (hRgn、xPos、yPos))Fire_ClickIn (xPos、yPos);他Fire_ClickOut (xPos、yPos);月が私たちを作成する領域を削除DeleteObject(hRgn);0 を返します。}(&A)

ポリゴン内のポイントを既に計算しているので、 OnDraw 機能、それらを使用する OnLButtonDown 領域を作成します。次に、 PtInRegion API 関数を使用してクリックした点、多角形の内側かどうかを確認するには。

uMsgパラメーターが処理される Windows メッセージの ID。これにより、一連のメッセージを処理する 1 つの関数ができます。wParamlParam 、処理されているメッセージの標準の値です。パラメーター bHandled 関数、メッセージ処理するかどうかを指定することができます。既定では、値TRUEに、関数がメッセージを処理しますが、設定することができます示すために設定されてFALSE 。そうすることの他のメッセージ ハンドラー関数には、メッセージを送信するを探しますに ATL になります。

今あなたのイベントをしてください。コントロールを作成し、 ActiveX コントロール テスト コンテナーを再度開始します。今回は、イベント ログの window.nbsp を表示;[出力] ウィンドウにイベントをルーティングするには、ログのオプションメニューからを選択し、出力ウィンドウにログを選択します。今、コントロールを挿入して、ウィンドウ内をクリックしてください。確認 ClickIn 、塗りつぶされたポリゴン内をクリックするとが発生と ClickOut の外側をクリックすると発生(&N)。

次に、プロパティ ページを追加します。

手順 4 に戻る|nbsp;手順 6 に進む(&N)

Index