共用方式為


ActiveX 控制項容器:從 ActiveX 控制項中處理事件

本文將討論使用屬性視窗來安裝 ActiveX 控制項的事件處理常式在 ActiveX 控制項容器。 事件處理常式以回應用來接收告知 (來自控制項) 某些事件和執行某些動作。 這個告知稱為」引發事件。

注意事項注意事項

本文使用對話方塊架構的 ActiveX 控制項容器專案名為 Container 和內嵌控制項 (名為) 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;
}

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

建立事件處理常式。

  1. 從類別檢視中,選取包含 ActiveX 控制項的對話方塊類別。 對於這個範例,請使用 CContainerDlg。

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

  3. 在屬性視窗中,選取內嵌 ActiveX 控制項的控制項 ID。 對於這個範例,請使用 IDC_CIRCCTRL1。

    屬性視窗會顯示可供內嵌 ActiveX 控制項引發事件的清單。 會以粗體顯示的所有成員函式已經處理函式指派給它。

  4. 選取您要對話方塊類別中處理的事件。 對於這個範例,請選取 Click

  5. 從右邊的下拉式清單方塊中,選取 <Add> ClickCircctrl1

  6. 按兩下從類別檢視的新處理常式函式跳至 CContainerDlg實作 (.CPP) 檔案中建立事件處理常式程式碼。

請參閱

概念

ActiveX 控制項容器