ActiveX 控制項容器:從 ActiveX 控制項中處理事件
本文討論如何使用 [ 屬性 ] 視窗 (在 類別檢視 中) 在 ActiveX 控制項容器中安裝 ActiveX 控制項的事件處理常式。 事件處理常式可用來接收特定事件的通知(來自控制項),並在回應中執行某些動作。 此通知稱為「引發」事件。
重要
ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控制項 。
注意
本文使用對話架構的 ActiveX 控制項容器專案 (名為 Container) 和內嵌控制項 (名為 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) 檔案。