共用方式為


ActiveX 控件容器:處理來自 ActiveX 控件的事件

本文討論如何使用 [屬性 ] 視窗 (在 類別檢視中) 在 ActiveX 控件容器中安裝 ActiveX 控件的事件處理程式。 事件處理程式可用來接收特定事件的通知(來自控制件),並在響應中執行某些動作。 此通知稱為「觸發」事件。

這很重要

ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控件

備註

本文使用名為 Container 的對話框式 ActiveX 控件容器專案,以及名為 Circ 的內嵌控件,作為程式和程式代碼中的範例。

使用 [屬性] 視窗中的 [事件] 按鈕(在 [類別檢視] 中),您可以建立會在 ActiveX 控件容器應用程式中發生的事件對應。 當您將事件處理常式新增至控制項容器類別時,Visual C++ 會建立並維護此對應稱為「事件接收映射」。 使用事件映射項目實作的每個事件處理程式,將特定事件對應至容器的事件處理成員函數。 當 ActiveX 控制件對象引發指定的事件時,會呼叫這個事件處理程式函式。

如需事件接收對應的詳細資訊,請參閱在類別庫參考中的事件接收對應

專案的事件處理程式修改

當您使用屬性視窗來新增事件處理程式時,會在專案中宣告並定義事件接收器映射。 當首次新增事件處理常式時,下列語句會被新增到 .CPP 檔案中。 此程式碼宣告了此對話框類別的事件接收器對應表(在此案例中為 CContainerDlg):

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
END_EVENTSINK_MAP()

當您使用屬性視窗來新增事件時,事件對應項目(ON_EVENT)會新增至事件接收器對應,而事件處理程式函式會新增至容器的實作.CPP檔案。

下列範例會針對 Circ 控制件的事件宣告名為 OnClickInCircCtrlClickIn 事件處理程式:

BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
ON_EVENT(CContainerDlg, IDC_CIRCCTRL1, 1 /* ClickIn */, OnClickInCircctrl1,
         VTS_I4 VTS_I4)
END_EVENTSINK_MAP()

此外,下列範本會新增至 CContainerDlg 類別實作 (.CPP) 檔案,以新增事件處理程式成員函式:

BOOL CContainerDlg::OnClickInCircctrl1(OLE_XPOS_PIXELS nX, OLE_YPOS_PIXELS nY)
{
   // use nX and nY here
   TRACE(_T("nX = %d, nY = %d\n"), nX, nY);
   return TRUE;
}

如需事件接收器巨集的詳細資訊,請參閱類別庫參考中的事件接收映射

建立事件處理程式函式

  1. 從 [類別檢視] 中,選取包含 ActiveX 控件的對話框類別。 在這裡範例中,請使用 CContainerDlg

  2. 在 [ 屬性] 視窗中,按兩下 [ 事件] 按鈕。

  3. 在 [ 屬性] 視窗中,選取內嵌 ActiveX 控件的控件識別碼。 在這裡範例中,請使用 IDC_CIRCCTRL1

    [ 屬性 ] 視窗會顯示內嵌 ActiveX 控制件可以引發的事件清單。 以粗體顯示的任一成員函式,都已將處理程式函式指派給它。

  4. 選取您希望對話框類別處理的事件。 在此範例中,選取 按一下

  5. 從右側的下拉式清單框中,選取 <新增> ClickCircctrl1

  6. 在 [類別檢視] 中按兩下新處理程式函式,以跳至 CContainerDlg 的實作 (.CPP) 檔案中的事件處理程式代碼。

另請參閱

ActiveX 控件容器