八宝书库 > 文学其他电子书 > 深入浅出MFC第2版(PDF格式) >

第145部分

深入浅出MFC第2版(PDF格式)-第145部分

小说: 深入浅出MFC第2版(PDF格式) 字数: 每页4000字

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




    }; 



    // in TEXT。CPP 

    。。。 

    #include 〃TextView。h〃 

    #include 〃HexView。h〃 

    。。。 

   BOOL CTextApp::InitInstance() 

    { 

           。。。 

           CMultiDocTemplate* pDocTemplate; 

           pDocTemplate = new CMultiDocTemplate( 

                   IDR_TEXTTYPE; 

                   RUNTIME_CLASS(CTextDoc); 

                   RUNTIME_CLASS(CChildFrame); // custom MDI child frame 

                   RUNTIME_CLASS(CTextView)); 

           AddDocTemplate(pDocTemplate); 



           m_pTemplateTxt = new CMultiDocTemplate( 

                   IDR_TEXTTYPE; 

                   RUNTIME_CLASS(CTextDoc); 

                   RUNTIME_CLASS(CChildFrame); // custom MDI child frame 

                   RUNTIME_CLASS(CTextView)); 



           m_pTemplateHex = new CMultiDocTemplate( 



                                                                                                729 


…………………………………………………………Page 792……………………………………………………………

                    第篇    深入  MFC  程式設計 



                                       IDR_TEXTTYPE; 

                                       RUNTIME_CLASS(CTextDoc); 

                                       RUNTIME_CLASS(CChildFrame); // custom MDI child frame 

                                       RUNTIME_CLASS(CHexView)); 

                               。。。 

                       } 



                       int CTextApp::ExitInstance() 

                       { 

                               delete m_pTemplateTxt; 

                               delete m_pTemplateHex; 

                               return CWinApp::ExitInstance(); 

                       } 



                      修改CTextDoc 程序代码,添加成员变量。Document  的数据是10 笔字符串: 



                       // in TEXTDOC。H 

                       class CTextDoc : public CDocument 

                       { 

                       public: 

                               CStringArray m_stringArray; 

                       。。。 

                       }; 



                       // in TEXTDOC。CPP 

                       BOOL CTextDoc::OnNewDocument() 

                       { 

                           if (!CDocument::OnNewDocument()) 

                               return FALSE; 



                           m_stringArray。SetSize(10); 

                           m_stringArray'0' = 〃If you love me let me know;  〃; 

                           m_stringArray'1' = 〃if you don't then let me go; 〃; 

                           m_stringArray'2' = 〃I can take another minute    〃; 

                           m_stringArray'3' = 〃  of day without you in it。  〃; 

                           m_stringArray'4' = 〃                             〃; 

                           m_stringArray'5' = 〃If you love me let it be;    〃; 

                           m_stringArray'6' = 〃if you don't then set me free〃; 

                           m_stringArray'7' = 〃。。。                          〃; 

                           m_stringArray'8' = 〃SORRY; I FORGET IT!          〃; 

                           m_stringArray'9' = 〃           J。J。Hou 1995。03。22  19:26〃; 



                           return TRUE; 

                       } 



730 


…………………………………………………………Page 793……………………………………………………………

                                                         第 13 章    多重文件與多重顯示 



  修改CTextView::OnDraw 函数码,在其中取得Document 对象指针,然后把文 



 字显现出来: 



   // in TEXTVIEW。CPP 

   void CTextView::OnDraw(CDC* pDC) 

    { 

           CTextDoc* pDoc = GetDocument(); 

           ASSERT_VALID(pDoc); 



           int i; j; nHeight; 

           TEXTMETRIC tm; 



           pDC…》GetTextMetrics(&tm); 

           nHeight = tm。tmHeight + tm。tmExternalLeading; 



           j = pDoc…》m_stringArray。GetSize(); 

           for (i = 0; i 《 j; i++) { 

               pDC…》TextOut(10; i*nHeight; pDoc…》m_stringArray'i'); 

           } 

    } 



  修改CHexView 程序代码, 在OnDraw 函数中取得Document 对象指针, 把 



 ASCII 转换为Hex 码,再以文字显示出来: 



   #0001  #include 〃stdafx。h〃 

   #0002  #include 〃Text。h〃 

   #0003  #include 〃TextDoc。h〃 

   #0004  #include 〃HexView。h〃 

   #0005  。。。 

   #0006  void CHexView::OnDraw(CDC* pDC) 

   #0007  { 

   #0008          //  CDocument* pDoc = GetDocument(); 

   #0009          CTextDoc* pDoc =  (CTextDoc*)GetDocument(); 

   #0010 

   #0011          int        i; j; k; l; nHeight; 

   #0012          long       n; 

   #0013          char       temp'10'; 

   #0014          CString    Line; 

   #0015          TEXTMETRIC tm; 

   #0016 

   #0017          pDC…》GetTextMetrics(&tm); 

   #0018          nHeight = tm。tmHeight + tm。tmExternalLeading; 

   #0019 

   #0020          j = pDoc…》m_stringArray。GetSize(); 



                                                                                          731 


…………………………………………………………Page 794……………………………………………………………

                    第篇    深入  MFC  程式設計 



                       #0021          for(i = 0; i 《 j; i++) { 

                       #0022              wsprintf(temp; 〃%02x     〃; i); 

                       #0023              Line = temp; 

                       #0024              l = pDoc…》m_stringArray'i'。GetLength(); 

                       #0025              for(k = 0; k 《 l; k++) { 

                       #0026                  n = pDoc…》m_stringArray'i''k' & 0x00FF; 

                       #0027                  wsprintf(temp; 〃%02lx 〃; n); 

                       #0028                  Line += temp; 

                       #0029              } 

                       #0030              pDC…》TextOut(10; i*nHeight; Line); 

                       #0031          } 

                       #0032  } 



                      定义CMainFrame 的两个命令处理例程:OnWindowText 和OnWindowHex,使选 



                      单命令项目和工具栏按钮得以发挥效用。函数内容直接拷贝自图13…5,只要 



                      修改其中第14 行即可。这两个函数是本节的技术重点。 



                       #0001  void CMainFrame::OnWindowText() 

                       #0002  { 

                       #0003      CMDIChildWnd* pActiveChild = MDIGetActive(); 

                       #0004      CDocument* pDocument; 

                       #0005      if (pActiveChild == NULL || 

                       #0006         (pDocument = pActiveChild…》GetActiveDocument()) == NULL) 

                       #0007      { 

                       #0008          TRACE0(〃Warning: No active document for WindowNew mandn〃); 

                       #0009          AfxMessageBox(AFX_IDP_MAND_FAILURE); 

                       #0010          return;     // mand failed 

                       #0011      } 

                       #0012 

                       #0013      // otherwise we have a new frame! 

                       #0014      CDocTemplate* pTemplate = ((CTextApp*) AfxGetApp())…》m_pTemplateTxt; 

                       #0015      ASSERT_VALID(pTemplate); 

                       #0016      CFrameWnd* pFrame = pTemplate…》CreateNewFrame(pDocument; pActiveChild); 

                       #0017      if (pFrame == NULL) 

                       #0018      { 

                       #0019          TRACE0(〃Warning: failed to create new framen〃); 

                       #0020          AfxMessageBox(AFX_IDP_MAND_FAILURE); 

                       #0021          return;     // mand failed 

                       #0022      } 

                       #0023 

                       #0024      pTemplate…》InitialUpdateFrame(pFrame; pDocument); 

                       #0025  } 

                       #0026 

                       #0027  void CMainFrame::OnWindowHex() 



732 


…………………………………………………………Page 795……………………………………………………………

                                                           第 13 章    多重文件與多重顯示 



    #0028  { 

    #0029      CMDIChildWnd* pActiveChild = MDIGetActive(); 

    #0030      CDocument* pDocument; 

    #0031      if (pActiveChild == NULL || 

    #0032         (pDocument = pActiveChild…》GetActiveDocument()) == NULL) 

    #0033      { 

    #0034          TRACE0(〃Warning: No active document for WindowNew mandn〃); 

    #0035          AfxMessageBox(AFX_IDP_MAND_FAILURE); 

    #0036          return;     // mand failed 

    #0037      } 

    #0038 

    #0039      // otherwise we have a new frame! 

    #0040      CDocTemplate* pTemplate = ((CTextApp*) AfxGetApp())…》m_pTemplateHex; 

    #0041      ASSERT_VALID(pTemplate); 

    #0042      CFrameWnd* pFrame = pTemplate…》CreateNewFrame(pDocument; pActiveChild); 

    #0043      if (pFrame == NULL) 

    #0044      { 

    #0045          TRACE0(〃Warning: failed to create new framen〃); 

    #0046          AfxMessageBox(AFX_IDP_MAND_FAILURE); 

    #0047          return;     // mand failed 

    #0048      } 

    #0049 

    #0050      pTemplate…》InitialUpdateFrame(pFrame; pDocument); 

    #0051  } 



   如果你要两个view 都有打印预视的能力,必须在CHexView 中改写下面三个 

    

 

   虚拟函数,至于它们的内容,可以依样画葫芦地从CTextView 的同名函数中拷 

   贝一份过来: 



    // in HEXVIEW。H 

   class CHexView : public CView 

    { 

    。。。 

    // Overrides 

           // ClassWizard generated virtual function overrides 

           //{{AFX_VIRTUAL(CHexView) 

           protected: 

           virtual void OnDraw(CDC* pDC);      // overridden to draw this view 

           protected: 

           virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); 

           virtual void OnBeginPrinting(CDC* pDC; CPrintInfo* pInfo); 

           virtual void OnEndPrinting(CDC* pDC; CPrintInfo* pInfo); 

           //}}AFX_VIRTUAL 

    。。。 

    }; 



                                                                                              733 


……………

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的