首页 / 软件开发 / C++ / 利用非模窗口生成MDI界面
利用非模窗口生成MDI界面2008-01-19Kelvin我想生成一个MDI窗口的界面,但发现用VC实现起来很麻烦,要加很多很多的RUNTIME_CLASS,而且不能实现在主窗口中加入功能选项。就是说生成一个OUTLOOK的主窗口,在主窗口中再加入多文档窗口(象OFFICE的多文档子窗口)。因此,写了这个 CMDIChild 类。效果如图一所示。要实现本类:第一步:生成一个单文档程序(基类是CFormView)。第二步:在工程中加入 MDIChild.H 和 MDIChild.cpp 两个文件。第三步:在主窗口中加入一个变量 CMDIChild m_Child。#include "MDIChild.H"
class CMainFrame : public CFrameWnd
{
protected: // create from serialization only
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
// Attributes
public:
CMDIChild m_Child; ///////////////////////////////
.....
}
第四步:在 OnCreate() 事件中加入m_Child.InitMainWnd(this)。int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
......
RECT Rect;
SetRect(&Rect, 0,64,800, 574); // 非模子窗口的活动区域,没想出自动计算的好办法,
m_Child.InitMainWnd(this, &Rect); //所以只能手工设置。
}
第五步:增加菜单事件#include "Dlg1.H"
void CMainFrame::OnDialog1()
{
CDlg1 *pDlg = NULL;
char *sName = "功能1"; ////////////////////////////////
if(!m_Child.GetClassChild(sName))
{
pDlg = new CDlg1;
if(!pDlg) return;
pDlg->Create(IDD_DIALOG1, this);
}
m_Child.ADD((CView*)pDlg, sName);
}