利用MFC的Application Wizard我們可以方便的創建一個工程,首先在工程類型中選擇MFC ActiveX Control,然後選擇在工程中創建多少個控件。在接下來的對話框中並且為每個控件輸入相關信息,通過Edit Name按鈕可以為控件指定名稱,通過Advanced按鈕可以為控件指定各種附加特性,此外你還可以將控件指定為一個繼承了某種現有窗口類的子類。在本節的例子中我們創建三個控件,分別是:
在工程創建完畢後你就可以編譯並測試控件了,但是這時候的控件還不能做任何事情。我們需要為控件添加方法和屬性。簡單的講,方法就相當與類中的函數調用,而屬性就相當與類中的成員變量。
假設在普通窗口控件中我們將顯示一份學生資料,包括姓名,出生年月,班級名稱,為了能夠設置這些數據,我們為控件添加一個方法。選擇Class Wizard,並選中對話框中的Automation頁,按下Add Method按鈕以添加消息,然後在彈出的對話框中輸入相關信息。我們為新添加的方法取名為SetMertial,同時指定三個參數LPCTSTR pszName,LPCTSTR pszBirth,LPCTSTR pszClass,返回值設置為void,在保存後Class Wizard會生成一個函數,該函數的名稱就是你所指定的方法名稱。此外我們還添加一個屬性用於讓用戶設置顯示文字的顏色。在添加屬性對話框中為屬性取名為TextColor,並且接收的參數為OLE_COLOR,並且將實現方法設定為Get/Set Methods。在保存後Class Wizard會為你生成GetXXX/SetXXX兩個函數XXX就代表你所指定的屬性名,當控件容器更改屬性時就通過這兩個函數。
然後我們為CSam_windowCtrl添加三個成員變量保存這些學生資料和一個用於保存顏色,當然別忘了在構造函數中對它們初始化。然後修改和添加與方法和屬性有關的函數,我們可以看到在數據被修改後都會調用Invalidate()使窗口重繪。
// 添加成員變量
class CSam_windowCtrl : public COleControl
{
DECLARE_DYNCREATE(CSam_windowCtrl)
// Constructor
public:
CSam_windowCtrl();
CString m_szName,m_szBirth,m_szClas