ActiveX 控制項容器: 程式設計 ActiveX 於 ActiveX 控制項容器的控制項

這篇文章說明的程序來存取公開方法屬性的內嵌 ActiveX 控制項。基本上,您將遵循下列步驟:

  1. 將 ActiveX 控制項加入至 ActiveX 容器專案使用圖庫。

  2. 定義成員變數 (或另一個表單的存取權限) 與 ActiveX 相同型別的控制包裝函式類別。

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

這個討論而言,假設您已建立對話方塊架構的專案 (稱為 「 容器 」) 與 ActiveX 控制項支援。Circ 控制項範例,Circ,將會加入至產生的專案。

當 Circ 控制項插入專案 (步驟 1) 時,將 Circ 控制項的執行個體插入應用程式的主要對話方塊。

程序

若要將 Circ 控制項加入對話方塊樣板

  1. 載入 ActiveX 控制項容器專案。例如,使用Container專案。

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

  3. 開啟對話方塊資料夾。

  4. 連按兩下主要對話方塊樣板。例如,使用 IDD_CONTAINER_DIALOG

  5. 按一下 [工具箱] 上的 [Circ 控制項] 圖示。

  6. 按一下要插入 Circ 控制項的對話方塊中的點。

  7. 檔案 ] 功能表中,選擇 全部儲存將所有的修改結果存入對話方塊範本。

修改專案

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

#include "circ.h"

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

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

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++ 所加入至專案的包裝函式類別。成員變數然後可用來在任何時候存取內嵌的控制項。

加入成員變數 ] 對話方塊中加入m_circctl成員變數加入專案,它也會將加入下列幾行的標頭檔 (。H) 中的CContainerDlg類別:

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 會自動新增到CContainerDlg的實作DoDataExchange:

DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);

程式設計 ActiveX 控制項

此時,ActiveX 控制項插入對話方塊樣板也可以為它建立了成員變數。您現在可以使用一般的 C++ 語法存取的屬性和內嵌控制項的方法。

如所示 (在的包裝函式類別標頭檔 (。H) 檔),標頭檔 (。H) 中的CCirc包裝函式類別,在此案例的變動圓形H,包含一份成員函式,可用來取得和設定任何公開的屬性值。公開方法的成員函式也會提供。

若要修改控制項的屬性的一般位置是在OnInitDialog主對話方塊類別的成員函式。對話方塊隨即出現,它用來初始化它的內容,包括其控制項之前,會呼叫這個函式。

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

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 控制項容器