本文討論如何使用 [屬性 ] 視窗 (在 類別檢視中) 在 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 控制件的事件宣告名為 OnClickInCircCtrl
的 ClickIn
事件處理程式:
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;
}
如需事件接收器巨集的詳細資訊,請參閱類別庫參考中的事件接收映射。
建立事件處理程式函式
從 [類別檢視] 中,選取包含 ActiveX 控件的對話框類別。 在這裡範例中,請使用
CContainerDlg
。在 [ 屬性] 視窗中,按兩下 [ 事件] 按鈕。
在 [ 屬性] 視窗中,選取內嵌 ActiveX 控件的控件識別碼。 在這裡範例中,請使用
IDC_CIRCCTRL1
。[ 屬性 ] 視窗會顯示內嵌 ActiveX 控制件可以引發的事件清單。 以粗體顯示的任一成員函式,都已將處理程式函式指派給它。
選取您希望對話框類別處理的事件。 在此範例中,選取 按一下。
從右側的下拉式清單框中,選取 <新增> ClickCircctrl1。
在 [類別檢視] 中按兩下新處理程式函式,以跳至
CContainerDlg
的實作 (.CPP) 檔案中的事件處理程式代碼。