共用方式為


ActiveX 控制項容器:在 ActiveX 控制項容器中程式設計 ActiveX 控制項

本文說明存取公開的內嵌 ActiveX 控制項的 方法屬性 處理序。 基本上,您將執行下列步驟:

  1. 用來繪製廊的插入 ActiveX 控制項的 ActiveX 容器專案

  2. 定義 10% 成員變數 (或存取其他表單) 型別和 ActiveX 控制項包裝函式類別相同。

  3. 使用預先定義的包裝函式類別的成員函式的將 ActiveX 控制項 。

對於這個討論,假設您建立一個對話方塊架構的專案 (名為 Container) 有 ActiveX 控制項支援。 Circ 範例控制項, Circ,將加入至產生的專案。

一旦 Circ 控制插入專案 (步驟 1),則會插入 Circ 控制執行個體應用程式的主對話方塊。

程序

將 Circ 控制項加入至對話方塊範本

  1. 裝載 ActiveX 控制項容器專案。 對於這個範例,請使用 Container 專案。

  2. 按一下 [資源檢視] 索引標籤,

  3. 開啟 Dialog 資料夾。

  4. 按兩下主對話方塊範本。 對於這個範例,請使用 IDD_CONTAINER_DIALOG

  5. 按一下 Circ 控制要顯示在工具箱中。

  6. 按一下對話方塊內的一個位置插入 Circ 控制。

  7. 在檔案功能表上,選取 Save All 儲存對話方塊範本的任何修改。

在專案中修改

若要啟用容器應用程式存取 Circ 控制, Visual C++ 會自動將包裝函式類別 (CCirc) 實作檔 (.CPP) 到容器專案和包裝函式類別標頭檔 (。H) 對話方塊標頭檔的檔案:

#include "circ.h"

包裝函式類別標頭檔 (。H) 檔案

若要取得和設定屬性 (和叫用方法) Circ, CCirc 控制項的包裝函式類別提供所有公開的方法和屬性的宣告。 在此範例中,這些宣告在 CIRC.H. 中找到。 下列範例會定義 ActiveX 控制項公開介面類別 CCirc 的部分:

class CCirc : public CWnd
{


...


// Functions
//

   void AboutBox()
   {
      InvokeHelper(DISPID_ABOUTBOX, DISPATCH_METHOD, VT_EMPTY, NULL, NULL);
   }

// Properties
//

   unsigned long GetBackColor()
   {
      unsigned long result;
      GetProperty(DISPID_BACKCOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetBackColor(unsigned long propVal)
   {
      SetProperty(DISPID_BACKCOLOR, VT_UI4, propVal);
   }
   signed char GetCircleShape()
   {
      signed char result;
      GetProperty(0x1, VT_I1, (void*)&result);
      return result;
   }
   void SetCircleShape(signed char propVal)
   {
      SetProperty(0x1, VT_I1, propVal);
   }
   short GetCircleOffset()
   {
      short result;
      GetProperty(0x3, VT_I2, (void*)&result);
      return result;
   }
   void SetCircleOffset(short propVal)
   {
      SetProperty(0x3, VT_I2, propVal);
   }
   CString GetCaption()
   {
      CString result;
      GetProperty(DISPID_CAPTION, VT_BSTR, (void*)&result);
      return result;
   }
   void SetCaption(CString propVal)
   {
      SetProperty(DISPID_CAPTION, VT_BSTR, propVal);
   }
   COleFont GetFont()
   {
      LPDISPATCH result;
      GetProperty(DISPID_FONT, VT_DISPATCH, (void*)&result);
      return COleFont(result);
   }
   void SetFont(LPDISPATCH propVal)
   {
      SetProperty(DISPID_FONT, VT_DISPATCH, propVal);
   }
   unsigned long GetForeColor()
   {
      unsigned long result;
      GetProperty(DISPID_FORECOLOR, VT_UI4, (void*)&result);
      return result;
   }
   void SetForeColor(unsigned long propVal)
   {
      SetProperty(DISPID_FORECOLOR, VT_UI4, propVal);
   }
   CString GetNote()
   {
      CString result;
      GetProperty(0x4, VT_BSTR, (void*)&result);
      return result;
   }
   void SetNote(CString propVal)
   {
      SetProperty(0x4, VT_BSTR, propVal);
   }
   unsigned long GetFlashColor()
   {
      unsigned long result;
      GetProperty(0x2, VT_UI4, (void*)&result);
      return result;
   }
   void SetFlashColor(unsigned long propVal)
   {
      SetProperty(0x2, VT_UI4, propVal);
   }
};

使用標準 C++ 語法,這些函式可以從其他應用程式的程序會呼叫。 如需使用這個成員函式集的相關資訊存取控制項的方法和屬性,請參閱 將 ActiveX 控制項一節。

對專案的成員變數修改

一旦 ActiveX 控制項在對話方塊容器加入至專案並內嵌了,它可以由專案的其他組件存取。 存取控制是對話方塊類別的 建立成員變數 , CContainerDlg (步驟 2),與包裝函式類別相同專案中加入由 Visual C++。 您可以使用成員變數隨時存取內嵌控制項。

Add Member Variable 對話方塊加入 m_circctl 成員變數加入至專案時,也會將下列行加入至標頭檔。 CContainerDlg 類別的 H):

class CContainerDlg : public CDialog
{
   DECLARE_DYNAMIC(CContainerDlg)

public:
   CContainerDlg(CWnd* pParent = NULL);   // standard constructor
   virtual ~CContainerDlg();

   virtual void OnFinalRelease();

// Dialog Data
   enum { IDD = IDD_CONTAINER_DIALOG };

protected:
   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   DECLARE_MESSAGE_MAP()
   DECLARE_DISPATCH_MAP()
   DECLARE_INTERFACE_MAP()
public:
   CCirc m_circctl;


...


};

此外,對 DDX_Control 的呼叫會自動加入至 DoDataExchange的 CContainerDlg 實作:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

將 ActiveX 控制項

此時,您已經插入 ActiveX 控制項加入至對話方塊範本並建立其 10% 成員變數。 您現在可以使用一般的 C++ 語法存取內嵌控制項的屬性和方法。

為明顯 ( 包裝函式類別標頭檔 (。H) 檔案),標頭檔 (。 CCirc 包裝函式類別的 H),在這種情況下, CIRC.H 包含成員清單函式可用來取得和設定所有公開的屬性值。 公開方法的成員函式也可以。

修改控制項的屬性的常見位在主對話方塊類別的 OnInitDialog 成員函式。 呼叫這個函式,在對話方塊出現並使用初始化其內容之前,包括它的任何控制項。

下列程式碼範例會使用 m_circctl 成員變數修改內嵌 Circ 控制項的標題和 CircleShape 屬性:

BOOL CContainerDlg::OnInitDialog()
{
   CDialog::OnInitDialog();

   m_circctl.SetCaption(_T("Circ 2 Control"));
   if(!m_circctl.GetCircleShape())
      m_circctl.SetCircleShape(TRUE);

   return TRUE;  // return TRUE unless you set the focus to a control
}

請參閱

概念

ActiveX 控制項容器