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

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

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




                    #0123              nEndPage = printInfo。GetMinPage(); 

                    #0124          if (nEndPage 》 printInfo。GetMaxPage()) 

                    #0125              nEndPage = printInfo。GetMaxPage(); 



674 


…………………………………………………………Page 737……………………………………………………………

                                                               第 12 章    列印與預樱А�



#0126 

#0127          if (nStartPage 《 printInfo。GetMinPage()) 

#0128              nStartPage = printInfo。GetMinPage(); 

#0129          if (nStartPage 》 printInfo。GetMaxPage()) 

#0130              nStartPage = printInfo。GetMaxPage(); 

#0131 

#0132          int nStep = (nEndPage 》= nStartPage) ? 1 : …1; 

#0133          nEndPage = (nEndPage == 0xffff) ? 0xffff : nEndPage + nStep; 

#0134 

#0135          VERIFY(strTemp。LoadString(AFX_IDS_PRINTPAGENUM)); 

#0136 

#0137          // begin page printing loop 

#0138          BOOL bError = FALSE; 

        

#0139          for (printInfo。m_nCurPage = nStartPage; 

#0140               printInfo。m_nCurPage != nEndPage; printInfo。m_nCurPage += nStep) 

#0141          { 

        

#0142              OnPrepareDC (&dcPrint; &printInfo); 

#0143 

#0144              // check for end of print 

#0145              if (!printInfo。m_bContinuePrinting) 

#0146                  break; 

#0147 

#0148              // write current page 

#0149              TCHAR szBuf'80'; 

#0150              wsprintf(szBuf; strTemp; printInfo。m_nCurPage); 

        

#0151              dlgPrintStatus。SetDlgItemText(AFX_IDC_PRINT_PAGENUM; szBuf); 

#0152 

#0153              // set up drawing rect to entire page (in logical coordinates) 

#0154              printInfo。m_rectDraw。SetRect(0; 0; 

#0155                      dcPrint。GetDeviceCaps(HORZRES); 

#0156                      dcPrint。GetDeviceCaps(VERTRES)); 

#0157              dcPrint。DPtoLP(&printInfo。m_rectDraw); 

#0158 

#0159              // attempt to start the current page 

        

#0160              if (dcPrint。StartPage() 《 0) 

#0161              { 

#0162                  bError = TRUE; 

#0163                  break; 

#0164              } 

#0165 

#0166              // must call OnPrepareDC on newer versions of Windows because 

#0167              // StartPage now resets the device attributes。 

#0168              if (afxData。bMarked4) 

#0169                  OnPrepareDC(&dcPrint; &printInfo); 

#0170 

#0171              ASSERT(printInfo。m_bContinuePrinting); 



                                                                                       675 


…………………………………………………………Page 738……………………………………………………………

                   第篇    深入  MFC  程式設計    



                   #0172 

                   #0173              // page successfully started; so now render the page 

                           

                   #0174              OnPrint (&dcPrint; &printInfo); 

                           

                   #0175              if (dcPrint。EndPage() 《 0 || !_AfxAbortProc(dcPrint。m_hDC; 0)) 

                   #0176              { 

                   #0177                      bError = TRUE; 

                   #0178                      break; 

                   #0179              } 

                   #0180          } 

                   #0181 

                   #0182          // cleanup document printing process 

                   #0183          if (!bError) 

                           

                   #0184              dcPrint。EndDoc(); 

                   #0185          else 

                   #0186              dcPrint。AbortDoc(); 

                   #0187 

                   #0188          AfxGetMainWnd()…》EnableWindow();    // enable main window 

                   #0189 

                           

                   #0190          OnEndPrinting (&dcPrint; &printInfo);    // clean up after printing 

                           

                   #0191          dlgPrintStatus。DestroyWindow(); 

                   #0192 

                           

                   #0193          dcPrint。Detach();   // will be cleaned up by CPrintInfo destructor 

                   #0194      } 

                   #0195  } 



                          图12…4 CView::OnFilePrint 源代码,这是打印命令的第一战场。标出号码 



                                  的是重要动作, 稍后将有补充说明。 



                   以下是CView::OnFilePrint 函数之中重要动作的说明。你可以将这份说明与上一节「列 



                   印动作的背景原理」做一比对,就能够明白MFC 在什么地方为我们做了什么事情,也 



                   才因此能够体会,究竟我们该在什么地方改写虚拟函数,放入我们自己的补强程序代码。 



676 


…………………………………………………………Page 739……………………………………………………………

                                                              第 12 章    列印與預樱А�



  OnFilePrint 首先在堆栈中产生一个CPrintInfo 对象,并构造之,使其部份成员变量拥 



   有初值。CPrintInfo 是一个用来记录打印机资料的结构,其构造式配置了一个Win32 通 



   用打印对话框(mon print dialog)并将它指定给m_pPD : 



 // in AFXEXT。H 

 struct CPrintInfo // Printing information structure 

 { 

         CPrintDialog* m_pPD;     // pointer to print dialog 

         BOOL m_bPreview;         // TRUE if in preview mode 

         BOOL m_bDirect;          // TRUE if bypassing Print Dialog 

         。。。 

 }; 



上述的成员变量m_bPreview 如果是TRUE,表示处于预览模式,FALSE 表示处于打印 



模式;成员变量m_bDirect 如果是TRUE,表示省略【打印】对话框,FALSE 表示需显 



示【打印】对话框。 



上面出现过的CPrintDialog,用来更贴近描述打印对话框: 



 class CPrintDialog : public CmonDialog 

 { 

 public: 

         PRINTDLG& m_pd; 



         BOOL GetDefaults(); 

         LPDEVMODE GetDevMode() const;   // return DEVMODE 

         CString GetDriverName() const;  // return driver name 

         CString GetDeviceName() const;  // return device name 

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