ActiveX 控制項容器: 程式設計 ActiveX 於 ActiveX 控制項容器的控制項
這篇文章說明的程序來存取公開方法 和 屬性的內嵌 ActiveX 控制項。基本上,您將遵循下列步驟:
定義成員變數 (或另一個表單的存取權限) 與 ActiveX 相同型別的控制包裝函式類別。
設計 ActiveX 控制項的使用預先定義的包裝函式類別的成員函式。
這個討論而言,假設您已建立對話方塊架構的專案 (稱為 「 容器 」) 與 ActiveX 控制項支援。Circ 控制項範例,Circ,將會加入至產生的專案。
當 Circ 控制項插入專案 (步驟 1) 時,將 Circ 控制項的執行個體插入應用程式的主要對話方塊。
程序
若要將 Circ 控制項加入對話方塊樣板
載入 ActiveX 控制項容器專案。例如,使用Container專案。
按一下 [資源檢視] 索引標籤,
開啟對話方塊資料夾。
連按兩下主要對話方塊樣板。例如,使用 IDD_CONTAINER_DIALOG。
按一下 [工具箱] 上的 [Circ 控制項] 圖示。
按一下要插入 Circ 控制項的對話方塊中的點。
從檔案 ] 功能表中,選擇 全部儲存將所有的修改結果存入對話方塊範本。
修改專案
若要啟用存取 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
}