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 herem_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 herem_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 herem_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;
總結
以上是生活随笔為你收集整理的VC++多文档实例编程分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Notepad++ 删除非连续的列内
- 下一篇: VC++ 单文档项目显示打开的文件