ActiveX 控制項容器:在 ActiveX 控制項容器中程式設計 ActiveX 控制項
本文說明存取公開的內嵌 ActiveX 控制項的 方法 和 屬性 處理序。 基本上,您將執行下列步驟:
用來繪製廊的插入 ActiveX 控制項的 ActiveX 容器專案 。
定義 10% 成員變數 (或存取其他表單) 型別和 ActiveX 控制項包裝函式類別相同。
使用預先定義的包裝函式類別的成員函式的將 ActiveX 控制項 。
對於這個討論,假設您建立一個對話方塊架構的專案 (名為 Container) 有 ActiveX 控制項支援。 Circ 範例控制項, Circ,將加入至產生的專案。
一旦 Circ 控制插入專案 (步驟 1),則會插入 Circ 控制執行個體應用程式的主對話方塊。
程序
將 Circ 控制項加入至對話方塊範本
裝載 ActiveX 控制項容器專案。 對於這個範例,請使用 Container 專案。
按一下 [資源檢視] 索引標籤,
開啟 Dialog 資料夾。
按兩下主對話方塊範本。 對於這個範例,請使用 IDD_CONTAINER_DIALOG。
按一下 Circ 控制要顯示在工具箱中。
按一下對話方塊內的一個位置插入 Circ 控制。
在檔案功能表上,選取 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
}