利用非模窗口生成MDI介面,利用非模窗口生成MDI介面
【 tulaoshi.com - C语言心得技巧 】
利用非模窗口生成MDI界面
作者:Kelvin
下载源代码
我想生成一个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 onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)// Attributespublic: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);}第六步:补充CDlg1是一个CDialog的弹出窗口,将普通弹出窗口转变成非模窗口的方法在网上有很多,这里就不多说了,也可以自己看代码。非模子窗口是用名称进行管理的,就是说可以生成两个基类相同的窗口,但是它们 在 m_Child.ADD 的时候要用不同的名称登记。
来源:http://www.tulaoshi.com/n/20160129/1484052.html
看过《利用非模窗口生成MDI介面》的人还看了以下文章 更多>>