一、引入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);
}
下面介紹在制作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);
}