ActiveX 控制項容器: 處理 ActiveX 控制項的事件
本文將告訴您安裝 ActiveX 控制項的事件處理常式於 ActiveX 控制項容器中使用 [屬性] 視窗。事件處理常式用來接收通知 (控制項) 的特定事件,並執行某些動作來回應。此種通知便稱為 「 發出 」 事件。
![]() |
---|
這份文件會使用對話方塊架構 ActiveX 控制項容器專案命名容器和內嵌的程序和程式碼中做為範例命名 Circ 控制項。 |
使用 [事件] 按鈕,在 [屬性] 視窗中,您可以 ActiveX 控制項容器應用程式中建立,可能會發生的事件的對應。這幅地圖,稱為"事件接收對應 ',建立並維護的 Visual C++ 中,當您將事件處理常式加入至控制項容器類別。事件對應項目中,以實作每個事件處理常式會將特定的事件對應至容器事件處理常式成員函式。指定的事件由 ActiveX 控制項物件引發時,會呼叫這個事件處理常式函式。
如需有關事件接收對應的詳細資訊,請參閱事件接收對應 在 類別庫參考。
事件處理常式修改專案
當您使用 [屬性] 視窗加入事件處理常式時,一個事件接收對應宣告,然後在您的專案中定義。下列陳述式加入至控制項。CPP 檔案會加入事件處理常式的第一次。這段程式碼會宣告事件接收對應的對話方塊類別 (在此情況下, CContainerDlg):
BEGIN_EVENTSINK_MAP(CContainerDlg, CDialog)
...
END_EVENTSINK_MAP()
當您使用 [屬性] 視窗加入事件,事件對應項目 (ON_EVENT) 會加入事件接收對應和事件處理常式函式加入至容器的實作 (。Cpp)。
下列範例宣告一個事件處理常式,呼叫OnClickInCircCtrl,Circ 控制項的 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 控制項的控制項 ID]。例如,使用IDC_CIRCCTRL1。
[屬性] 視窗會顯示內嵌的 ActiveX 控制項可以引發的事件清單。已經以粗體顯示的任何成員函式具有指派給它的處理常式函式。
選取您希望對話方塊類別來處理的事件。這個範例中,選取 [ 按一下。
從右邊下拉式清單方塊中選取 <Add> ClickCircctrl1。
連按兩下 [類別檢視] 以跳至事件處理常式程式碼,在實作新的處理函式 (。Cpp) 的CContainerDlg。