目录:
创建单文档视图应用程序
创建多文档视图应用程序
1 创建单文档视图应用程序
1.1 问题
创建一个单文档视图应用程序。
1.2 方案
创建一个单文档视图应用程序.
1.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:添加应用程序类
添加CWinApp类的派生类CSDIApp类,创建应用程序窗口类并创建单文档模板。代码如下所示:
class CSDIApp : public CWinApp
{
public:
virtual BOOL InitInstance( );
};
CSDIApp theApp;
BOOL CSDIApp::InitInstance( )
{
CSingleDocTemplate * pTemplate = NULL;
pTemplate = new CSingleDocTemplate(
IDR_MAINFRM,
RUNTIME_CLASS(CSDIDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CSDIView) );
AddDocTemplate( pTemplate );
OnFileNew();
m_pMainWnd->ShowWindow( SW_SHOW );
m_pMainWnd->UpdateWindow( );
return TRUE;
}
步骤二:可编辑视图窗口类
添加CEditView类的派生类CSDIView类,可编辑视图窗口类。代码如下所示:
class CSDIView : public CEditView
{
public:
DECLARE_DYNCREATE( CSDIView )
};
IMPLEMENT_DYNCREATE( CSDIView, CEditView )
步骤三:文档类
添加CDocunment类的派生类CSDIdoc类,文档类。代码如下所示:
class CSDIDoc : public CDocument
{
public:
DECLARE_DYNCREATE( CSDIDoc )
};
IMPLEMENT_DYNCREATE( CSDIDoc, CDocument )
步骤四:添加主窗口框架类
添加CFrameWnd类的派生类CMainFrame类,主窗口。代码如下所示:
class CMainFrame : public CFrameWnd
{
public:
DECLARE_DYNCREATE( CMainFrame )
};
IMPLEMENT_DYNCREATE( CMainFrame, CFrameWnd )
1.4 完整代码
本案例的完整代码如下所示:
class CSDIDoc : public CDocument
{
public:
DECLARE_DYNCREATE( CSDIDoc )
};
IMPLEMENT_DYNCREATE( CSDIDoc, CDocument )
class CSDIView : public CEditView
{
public:
DECLARE_DYNCREATE( CSDIView )
};
IMPLEMENT_DYNCREATE( CSDIView, CEditView )
class CMainFrame : public CFrameWnd
{
public:
DECLARE_DYNCREATE( CMainFrame )
};
IMPLEMENT_DYNCREATE( CMainFrame, CFrameWnd )
class CSDIApp : public CWinApp
{
public:
virtual BOOL InitInstance( );
};
CSDIApp theApp;
BOOL CSDIApp::InitInstance( )
{
CSingleDocTemplate * pTemplate = NULL;
pTemplate = new CSingleDocTemplate(
IDR_MAINFRM,
RUNTIME_CLASS(CSDIDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CSDIView) );
AddDocTemplate( pTemplate );
OnFileNew();
m_pMainWnd->ShowWindow( SW_SHOW );
m_pMainWnd->UpdateWindow( );
return TRUE;
}
运行结果:如图-1所示
图-1
2 创建多文档视图应用程序
2.1 问题
创建一个多文档视图应用程序。
2.2 方案
创建一个多文档视图应用程序。
2.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:添加应用程序类
添加CWinApp类的派生类CMDIApp类,创建应用程序窗口类并创建多文档模板。当,用户点击新建时,创建新的文档视图窗口。代码如下所示:
class CMDIApp : public CWinApp
{
public:
virtual BOOL InitInstance( );
DECLARE_MESSAGE_MAP( )
public:
afx_msg void OnNew( );
};
CMDIApp theApp;
BEGIN_MESSAGE_MAP( CMDIApp, CWinApp )
ON_COMMAND( ID_NEW, OnNew )
END_MESSAGE_MAP( )
BOOL CMDIApp::InitInstance( )
{
CMultiDocTemplate * pTemplate = NULL;
pTemplate = new CMultiDocTemplate(
IDR_CHILDFRAME,
RUNTIME_CLASS( CMDIDoc ),
RUNTIME_CLASS( CChildFrame ),
RUNTIME_CLASS( CMDIView ) );
AddDocTemplate( pTemplate );
CMainFrame * pFrame = new CMainFrame;
pFrame->LoadFrame( IDR_MAINFRAME );
m_pMainWnd = pFrame;
m_pMainWnd->ShowWindow( SW_SHOW );
m_pMainWnd->UpdateWindow( );
OnFileNew( );
return TRUE;
}
void CMDIApp::OnNew( )
{
OnFileNew( );
}
步骤二:文档类
添加CDocunment类的派生类CMDIDoc类,创建文档类。代码如下所示:
class CMDIDoc : public CDocument
{
public:
DECLARE_DYNCREATE( CMDIDoc )
};
IMPLEMENT_DYNCREATE( CMDIDoc, CDocument )
步骤三:可编辑视图窗口类
添加CEditView类的派生类CMDIView类,可编辑视图窗口类。代码如下所示:
class CMDIView : public CEditView
{
public:
DECLARE_DYNCREATE( CMDIView )
DECLARE_MESSAGE_MAP( )
};
IMPLEMENT_DYNCREATE( CMDIView, CEditView )
BEGIN_MESSAGE_MAP( CMDIView, CEditView )
END_MESSAGE_MAP( )
步骤四:管理窗口类
添加CMDIChildWnd类的派生类CChildFrame类,Windows多文档界面(MDI)子窗口及用于管理窗口的成员。代码如下所示:
class CChildFrame : public CMDIChildWnd
{
public:
DECLARE_DYNCREATE( CChildFrame )
};
IMPLEMENT_DYNCREATE( CChildFrame, CMDIChildWnd )
步骤五:添加多文档管理子界面类
添加CMDIFrameWnd类的派生类CMainFrame类, Windows多文档界面(MDI)子窗口的功能和管理窗口。代码如下所示:
class CMainFrame : public CMDIFrameWnd
{
public:
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP( CMainFrame, CMDIFrameWnd )
END_MESSAGE_MAP( )
2.4 完整代码
本案例的完整代码如下所示:
class CMDIDoc : public CDocument
{
public:
DECLARE_DYNCREATE( CMDIDoc )
};
IMPLEMENT_DYNCREATE( CMDIDoc, CDocument )
class CMDIView : public CEditView
{
public:
DECLARE_DYNCREATE( CMDIView )
DECLARE_MESSAGE_MAP( )
};
IMPLEMENT_DYNCREATE( CMDIView, CEditView )
BEGIN_MESSAGE_MAP( CMDIView, CEditView )
END_MESSAGE_MAP( )
class CChildFrame : public CMDIChildWnd
{
public:
DECLARE_DYNCREATE( CChildFrame )
};
IMPLEMENT_DYNCREATE( CChildFrame, CMDIChildWnd )
class CMainFrame : public CMDIFrameWnd
{
public:
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP( CMainFrame, CMDIFrameWnd )
END_MESSAGE_MAP( )
class CMDIApp : public CWinApp
{
public:
virtual BOOL InitInstance( );
DECLARE_MESSAGE_MAP( )
public:
afx_msg void OnNew( );
};
CMDIApp theApp;
BEGIN_MESSAGE_MAP( CMDIApp, CWinApp )
ON_COMMAND( ID_NEW, OnNew )
END_MESSAGE_MAP( )
BOOL CMDIApp::InitInstance( )
{
CMultiDocTemplate * pTemplate = NULL;
pTemplate = new CMultiDocTemplate(
IDR_CHILDFRAME,
RUNTIME_CLASS( CMDIDoc ),
RUNTIME_CLASS( CChildFrame ),
RUNTIME_CLASS( CMDIView ) );
AddDocTemplate( pTemplate );
CMainFrame * pFrame = new CMainFrame;
pFrame->LoadFrame( IDR_MAINFRAME );
m_pMainWnd = pFrame;
m_pMainWnd->ShowWindow( SW_SHOW );
m_pMainWnd->UpdateWindow( );
OnFileNew( );
return TRUE;
}
void CMDIApp::OnNew( )
{
OnFileNew( );
}
运行结果:如图-2所示