VC++多文档实例编程分析

下面分析一个多文档实例的源码,看一下多文档界面的实现;

http://www.veryhuo.com/down/html/27693.html

VC++ 开发的多文档界面实例源程序
下载一个源码;

杀毒哈,有毒自己负责;

运行程序,界面如下;

看到多文档界面,不同子窗口上控件、内容都不同;分别是证书的申请(录入)、审核、制作;

不同子窗口上的不同控件,是用对话框资源实现的;

看它的对话框资源;对于证书的不同操作,都有对应对话框资源;

看对话框对应的类;

有的对话框对应的类是一个对话框类;这是将作为对话框弹出的;

下面带VIEW的三个对话框资源;

其对应的类是一个视类;

IMPLEMENT_DYNCREATE(CMadeCertView, CFormView)

CMadeCertView::CMadeCertView()
    : CFormView(CMadeCertView::IDD)
{

......

它们是从CFormView视类继承下来;

然后是在主框架CMainFrame,根据点击了不同的菜单,进行加载;代码如下;

void CMainFrame::OnInputUnit() 
{
	// TODO: Add your command handler code here
	m_currentwin=1;//录入
	if(m_pInput!=NULL)
	{
		m_pInput->MDIActivate();
		return;
	}

	m_pInput=new CRaChildFrame();
	CCreateContext context;
	context.m_pNewViewClass=RUNTIME_CLASS(CInputCertView);
	if(!m_pInput->LoadFrame(IDI_ICON3,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
		return;
	m_pInput->ShowWindow(SW_SHOWMAXIMIZED);
	m_pInput->InitialUpdateFrame(NULL,true);

	
}

void CMainFrame::OnAuditingCert() 
{
	// TODO: Add your command handler code here
	m_currentwin=2;//审核
	if(m_pAuditing!=NULL)
	{
		m_pAuditing->MDIActivate();
		return;
	}

	m_pAuditing=new CRaChildFrame();
	CCreateContext context;
	context.m_pNewViewClass=RUNTIME_CLASS(CAuditingCertView);
	if(!m_pAuditing->LoadFrame(IDI_ICON4,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
		return;
	m_pAuditing->ShowWindow(SW_SHOWMAXIMIZED);
	m_pAuditing->InitialUpdateFrame(NULL,true);


}


void CMainFrame::OnMadeMade() 
{
	// TODO: Add your command handler code here
	m_currentwin=4;//制作
	if(m_pMade!=NULL)
	{
		m_pMade->MDIActivate();
		return;
	}

	m_pMade=new CRaChildFrame();
	CCreateContext context;
	context.m_pNewViewClass=RUNTIME_CLASS(CMadeCertView);
	if(!m_pMade->LoadFrame(IDI_ICON5,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
		return;
	m_pMade->ShowWindow(SW_SHOWMAXIMIZED);
	m_pMade->InitialUpdateFrame(NULL,true);

}

以审核为例;

m_pAuditing=new CRaChildFrame();   生成一个子框架,指针为m_pAuditing;

    CCreateContext context;     

CCreateContext没有基类。
在主程序创建框架窗口、以及文档相关的视图时,会使用CCreateContext结构。建立窗口时,此结构中的值用于连接构成文档的组件和文档数据的视图。仅当覆盖了创建过程时才需要使用CCreateContext。
CCreateContext结构包含了指向文档、框架窗口和文档模板的指针,包括了一个CRuntimeClass指针,CRuntimeClass标志了待创建的视图的类型。运行时类信息和当前文档指针用于动态地创建视图。


    context.m_pNewViewClass=RUNTIME_CLASS(CAuditingCertView);

    设置运行时的视类为CAuditingCertView;


    if(!m_pAuditing->LoadFrame(IDI_ICON4,WS_MAXIMIZE|WS_OVERLAPPEDWINDOW,this,&context))
        return;

    加载框架,第一个参数为图标,然后是窗口类型,初始最大化,

WS_OVERLAPPEDWINDOW是多种窗口类型的组合,包含层叠还有其他风格;

使用前面构造的context,这样就把视类加载到了子框架中;


    m_pAuditing->ShowWindow(SW_SHOWMAXIMIZED);
    m_pAuditing->InitialUpdateFrame(NULL,true);

显示窗口;

控件是在对话框资源里添加的;

class CMainFrame : public CMDIFrameWnd
{
    DECLARE_DYNAMIC(CMainFrame)
public:
    CMainFrame();

// Attributes
public:
// Operations
public:
    CRaChildFrame *m_pInput,*m_pAuditing,*m_pMade;
    UINT m_currentwin;
    CImageList    m_imageList;

三个子框架指针是在主框架类的头文件里定义的;类型为public;

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/88207784