ActiveX 控制項容器:在 ActiveX 控制項容器中程式設計 ActiveX 控制項
本文說明存取內嵌 ActiveX 控制項公開 方法和 屬性 的程式。
重要
ActiveX 是不應該用於新開發的舊版技術。 如需取代 ActiveX 的新式技術詳細資訊,請參閱 ActiveX 控制項 。
基本上,您將遵循下列步驟:
定義與 ActiveX 控制項包裝函式類別相同類型的成員變數 (或其他存取形式)。
使用包裝函式類別的預先定義成員函式,對 ActiveX 控制項 進行程式設計。
在此討論中,假設您已使用 ActiveX 控制項支援建立對話式專案(名為 Container)。 Circ 範例控制項 Circ 將會新增至產生的專案。
一旦將 Circ 控制項插入專案 (步驟 1),請將 Circ 控制項的實例插入應用程式的主要對話方塊中。
程序
將 Circ 控制項新增至對話方塊範本
載入 ActiveX 控制項容器專案。 在此範例中
Container
,請使用 專案。按一下 [資源檢視] 索引標籤。
開啟 Dialog 資料夾。
按兩下主要對話方塊範本。 在此範例中,請使用 IDD_CONTAINER_DIALOG 。
按一下工具箱上的 Circ 控制項圖示。
按一下對話方塊中的一個位置,以插入 Circ 控制項。
從 [檔案] 功能表中,選擇 [ 全部 儲存] 以將所有修改儲存至對話方塊範本。
專案修改
若要讓容器應用程式存取 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++ 新增至專案的包裝函式類別相同。 然後,您可以使用成員變數隨時存取內嵌控制項。
當 [ 新增成員變數 ] 對話方塊將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 的呼叫 會自動新增至 CContainerDlg
的 實作 DoDataExchange
:
DDX_Control(pDX, IDC_CIRCCTRL1, m_circctl);
使用 ActiveX 控制項進行程式設計
此時,您已將 ActiveX 控制項插入對話方塊範本,並為其建立成員變數。 您現在可以使用通用 C++ 語法來存取內嵌控制項的屬性和方法。
如前所述 (在包裝函式類別標頭中 。H) 檔案 ,標頭檔 (.包裝函式類別的 CCirc
H) 在此案例中為 CIRC。H,包含成員函式清單,可用來取得和設定任何公開的屬性值。 也提供公開方法的成員函式。
修改控制項屬性的常見位置是在 OnInitDialog
主要對話類別的成員函式中。 此函式會在對話方塊出現之前呼叫,並用來初始化其內容,包括其任何控制項。
下列程式碼範例會使用 m_circctl 成員變數來修改內嵌 Circ 控制項的 Caption 和 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
}