在ActiveX控件中引入窗體技術(shù)

字號(hào):

一、引入Dialog技術(shù)
    下面介紹在制作ActiveX控件時(shí)引入有模式對(duì)話框技術(shù),制作步驟如下:
    創(chuàng)建一新的MFC ActiveX ControlWizard項(xiàng)目,取名為Hello,其他用缺省選項(xiàng);
    在ResourceView頁中新增一對(duì)話框資源,命名為IDD_HELLODIALOG,可以在對(duì)話框上放自己的控件;
    為對(duì)話框資源IDD_HELLODIALOG創(chuàng)建新類CHelloDialog,從CDialog繼承;
    確認(rèn)在HelloCtrl.h中已加入語句#include "HelloDialog.h",為CHelloCtrl類添加成員變量CHelloDialog m_helloDialog;
    用ClassWizard在Automation頁中為CHelloCtrl添加一方法void DoHello(),外部名亦為DoHello;
    void CHelloCtrl::DoHello() { // 顯示對(duì)話框 m_helloDialog.DoModal(); }
    可以用ActiveX Control Test Container測(cè)試Hello Control的DoHello方法。
    下面介紹在制作ActiveX控件時(shí)引入無模式對(duì)話框技術(shù),制作步驟如下:
    在上面工作的基礎(chǔ)上,用ClassWizard為CHelloCtrl添加WM_CREATE的處理函數(shù)OnCreate,在此創(chuàng)建無模式對(duì)話框;
    修改DoHello代碼,在此顯示對(duì)話框;
    int CHelloCtrl::OnCreate (LPCREATESTRUCT lpCreateStruct) {
    if (COleControl::OnCreate(lpCreateStruct) == -1) return -1;
    // 創(chuàng)建對(duì)話框
    m_helloDialog.Create(IDD_HELLODIALOG);
    return 0;
    }
    void CHelloCtrl::DoHello() {
    // 顯示對(duì)話框
    m_helloDialog.ShowWindow(SW_SHOW);
    }
    下面介紹制作以對(duì)話框作為界面的ActiveX控件技術(shù),制作步驟如下:
    在上面工作的基礎(chǔ)上,設(shè)置對(duì)話框資源IDD_HELLODIALOG屬性的Style頁為Style:Child、Border:Dialog Frame、Title Bar:unchecked;設(shè)置More Style頁為Visible:checked;Control:checked;設(shè)置Extended Styles頁為Static Edge:checked;
    在CHelloCtrl::OnCreate中寫入m_helloDialog.Create(IDD_HELLODIALOG,this)語句;
    在CHelloCtrl::OnDraw中寫入m_helloDialog.MoveWindow(rcBounds,TRUE);
    int CHelloCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if (COleControl::OnCreate(lpCreateStruct) == -1) return -1;
    // 創(chuàng)建對(duì)話框
    m_helloDialog.Create(IDD_HELLODIALOG,this);
    return 0;
    }
    void CHelloCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) {
    // 定位Hello對(duì)話框
    m_helloDialog.MoveWindow(rcBounds,TRUE);
    }