使用對話框作為子窗口是一種很常用的技術,這樣可以使界面設計簡化而且修改起來更加容易。
簡單的說這種技術的關鍵就在於創建一個無模式的對話框,並在編輯對話框資源時指明Child風格和無邊框風格,如圖。
接下來利用產生一個CDialog的派生類,並進行相關的消息映射。在創建子窗口時需要利用下面的代碼:
int CMy59_s1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//創建子窗口
m_dlgChild.Create(IDD_CHILD_DLG,this);
//重新定位
m_dlgChild.MoveWindow(0,0,400,200);
//顯示窗口
m_dlgChild.ShowWindow(SW_SHOW);
return 0;
}
此外還有一中類似的技術是利用CFormView派生類作為子窗口,在編輯對話框資源時也需要指明Child風格和無邊框風格。然後利用ClassWizard產生以CFormView為基類的派生類,但是由於該類的成員函數都是受保護的,所以需要對產生的頭文件進行如下修改:
class CTestForm : public CFormView
{
//將構造函數和構析函數改為共有函數
public:
CTestForm();
virtual ~CTestForm();
DECLARE_DYNCREATE(CTestForm)