共用方式為


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 控制項的事件宣告名為 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 控制項容器