友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
一世书城 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第108章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




                   #0025     DECLARE_DYNCREATE(CScribbleDoc) 

                   #0026    virtual void Serialize(CArchive& ar); 

                   #0027     DECLARE_MESSAGE_MAP() 

                   #0028 }; 

                   #0029 

                   #0030 class CScribbleView : public CView 

                   #0031 { 

                   #0032     DECLARE_DYNCREATE(CScribbleView) 

                   #0033     CScribbleDoc* GetDocument(); 

                   #0034 

                   #0035     virtual void OnDraw(CDC* pDC); 

                   #0036    DECLARE_MESSAGE_MAP()                // MFC 內部 

                   #0037 }; 

                                                                 Int AfxAPI AfxWinMain(!K) 

                   #0038 

                                                                 { 

                   #0039 class CAboutDlg : public CDialog 

                                                                  CWinApp* pApp = AfxGetApp(); 

                   #0040 { 

                                                                  AfxWinInit(!K);                 

                   #0041         DECLARE_MESSAGE_MAP() 

                                                                  pApp…》InitApplication();      

                   #0042 }; 

                   #0043                                          pApp…》InitInstance();          

                                                                  nReturnCode = pApp…》Run();    

                   #0044 //………………………………………………………………………………………………………………………………………………………………………………

                   #0045 

                                                                 } 

                   #0046 CScribbleApp theApp;  

                   #0047 

                   #0048 BEGIN_MESSAGE_MAP(CScribbleApp; CWinApp) 

                   #0049     ON_MAND(ID_APP_ABOUT; OnAppAbout)   

                   #0050     ON_MAND(ID_FILE_NEW; CWinApp::OnFileNew) 

                   #0051     ON_MAND(ID_FILE_OPEN; CWinApp::OnFileOpen)   

                   #0052     ON_MAND(ID_FILE_PRINT_SETUP; CWinApp::OnFilePrintSetup) 

                   #0053 END_MESSAGE_MAP() 

                   #0054 

                   #0055 BOOL CScribbleApp::InitInstance()  

                   #0056 { 

                   #0057     。。。 

                   #0058     CMultiDocTemplate* pDocTemplate; 

                   #0059     pDocTemplate = new CMultiDocTemplate(   

                   #0060             IDR_SCRIBTYPE; 

                   #0061             RUNTIME_CLASS(CScribbleDoc); 

                   #0062             RUNTIME_CLASS(CChildFrame); 

                   #0063             RUNTIME_CLASS(CScribbleView)); 

                   #0064     AddDocTemplate(pDocTemplate); 



426 


…………………………………………………………Page 489……………………………………………………………

                                               第7章    簡單而完整:MFC 骨幹程式 



#0065 

#0066    CMainFrame* pMainFrame = new CMainFrame;   

#0067     pMainFrame…》LoadFrame(IDR_MAINFRAME);      

#0068     m_pMainWnd = pMainFrame; 

#0069     ! K                                         // MFC 內部 



#0070     pMainFrame…》ShowWindow(m_nCmdShow);        CFrameWnd::Create 

#0071     pMainFrame…》UpdateWindow(); 

#0072     return TRUE; 

#0073 }                                               CWnd::CreateEx 

#0074 

#0075 BEGIN_MESSAGE_MAP(CAboutDlg; CDialog) 

                                                      ::CreateWindowEx 

#0076 END_MESSAGE_MAP() 

#0077 

#0078 void CScribbleApp::OnAppAbout()   

#0079 { 

#0080     CAboutDlg aboutDlg; 

#0081     aboutDlg。DoModal(); 

#0082 } 

#0083 

#0084 IMPLEMENT_DYNAMIC(CMainFrame; CMDIFrameWnd) 

                                                        WM_CREATE 

#0085 

#0086 BEGIN_MESSAGE_MAP(CMainFrame; CMDIFrameWnd)       wm_cre 

#0087     ON_WM_CREATE() 

#0088 END_MESSAGE_MAP() 

#0089 

#0090 static UINT indicators'' = 

#0091 { 

#0092     ID_SEPARATOR; 

#0093     ID_INDICATOR_CAPS; 

#0094     ID_INDICATOR_NUM; 

#0095     ID_INDICATOR_SCRL; 

#0096 }; 

#0097 

#0098 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   

#0099 { 

#0100     m_wndToolBar。Create(this); 



#0101     m_wndToolBar。LoadToolBar(IDR_MAINFRAME);  

#0102     m_wndStatusBar。Create(this); 



#0103     m_wndStatusBar。SetIndicators(indicators;  

#0104               sizeof(indicators)/sizeof(UINT)); 

#0105 

#0106     m_wndToolBar。SetBarStyle(m_wndToolBar。GetBarStyle() | 

#0107             CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); 

#0108 

#0109     m_wndToolBar。EnableDocking(CBRS_ALIGN_ANY); 



                                                                                 427 


…………………………………………………………Page 490……………………………………………………………

                   第篇    湷觥 FC  程式設計 



                   #0110     EnableDocking(CBRS_ALIGN_ANY); 

                   #0111     DockControlBar(&m_wndToolBar); 

                   #0112     return 0; 

                   #0113 } 

                   #0114 

                   #0115 IMPLEMENT_DYNCREATE(CChildFrame; CMDIChildWnd) 

                   #0116 

                   #0117 BEGIN_MESSAGE_MAP(CChildFrame; CMDIChildWnd) 

                   #0118 END_MESSAGE_MAP() 

                   #0119 

                   #0120 IMPLEMENT_DYNCREATE(CScribbleDoc; CDocument) 

                   #0121 

                   #0122 BEGIN_MESSAGE_MAP(CScribbleDoc; CDocument) 

                   #0123 END_MESSAGE_MAP() 

                   #0124 

                   #0125 void CScribbleDoc::Serialize(CArchive& ar)   

                   #0126 { 

                   #0127     if (ar。IsStoring()) 

                   #0128     { 

                   #0129             // TODO: add storing code here 

                   #0130     } 

                   #0131     else 

                   #0132     { 

                   #0133             // TODO: add loading code here 

                   #0134     } 

                   #0135 } 

                   #0136 

                   #0137 IMPLEMENT_DYNCREATE(CScribbleView; CView) 

                   #0138 

                   #0139 BEGIN_MESSAGE_MAP(CScribbleView; CView) 

                   #0140     ON_MAND(ID_FILE_PRINT; CView::OnFilePrint) 

                   #0141     ON_MAND(ID_FILE_PRINT_DIRECT; CView::OnFilePrint) 

                   #0142     ON_MAND(ID_FILE_PRINT_PREVIEW; CView::OnFilePrintPreview) 

                   #0143 END_MESSAGE_MAP() 

                   #0144 

                   #0145 void CScribbleView::OnDraw(CDC* pDC) 

                   #0146 { 

                   #0147     CScribbleDoc* pDoc = GetDocument(); 

                   #0148     // TODO: add draw code for native data here 

                   #0149 } 



                      图7…6 Scribble step0 执行时序。这是一张简图,有一些次要动作 ( 例如鼠 



                             标拉曳功能、设定对话框底色) 并未列出, 但是在稍后的细部讨论中 



                             会提到。 



428 


…………………………………………………………Page 491……………………………………………………………

                                        第7章    簡單而完整:MFC 骨幹程式 



以下是图7…6 程序流程之说明: 



   

  ~  动作与流程和前一章的Hello 程序如出一辙。 



  我们改写InitInstance 这个虚拟函数。 



  new 一个CMultiDocTemplate 对象,此对象规划Document 、View  以及Document 

   Frame 窗口三者之关系。 



  new 一个CMyMDIFrameWnd 对象,做为主窗口对象。 



  调用LoadFrame,产生主窗口并加挂菜单等诸元,并指定窗口标题、文件标题、文 



   件档扩展名等(关键在IDR_MAINFRAME 常数)。LoadFrame  内部将调用Create,后 



   者将调用CreateWindowEx,于是触发WM_CREATE 消息。 



  由于我们曾于CMainFrame 之中拦截WM_CREATE  (利用ON_WM_CREATE 宏), 



   所以WM_CREATE 产生之际Framework 会调用OnCreate。我们在此为主窗口挂上工具 



   列和状态列。 



  回到InitInstance ,执行ShowWindow 显示窗口。 



返回目录 上一页 下一页 回到顶部 0 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!