按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
CPrintDialog::GetDefaults
::PrintDlg (Win32 API)
::PrintDlg
CPrintDialog::DoModal (in DLGPRNT。CPP)
CPrintDialog::DoModal
::PrintDlg (Win32 API)
::PrintDlg
CView::DoPreparePrinting 将贮存在CPrintInfo 结构中的对话框CPrintDialog* m_pPD
显示出来,借此收集使用者对打印机的各种设定,然后产生一个「打印机DC 」,储存在
printinfo。m_pPD…》m_pd。hDC 之中。
如果使用者在【打印】对话框中选按【打印到文件】,则再显示一个【Print to File 】
对话框,让使用者设定档名。
678
…………………………………………………………Page 741……………………………………………………………
第 12 章 列印與預樱А�
接下来取文件名称和输出设备的名称(可能是打印机也可能是个文件),并产生一个
DOCINFO 结构,设定其中的lpszDocName 和lpszOutput 字段。此一DOCINFO 结构
将在稍后的StartDoc 动作中用到。
如果使用者在【打印】对话框中按下【确定】钮,OnFilePrint 就在堆栈中制造出一
个CDC 对象,并把前面所完成的「打印机DC 」附着到CDC 对象上:
CDC dcPrint;
dcPrint。Attach(printInfo。m_pPD…》m_pd。hDC);
dcPrint。m_bPrinting = TRUE;
一旦CDC 完成, OnFilePrint 把CDC 对象以及前面的CPrintInfo 对象传给
OnBeginPrinting 作为参数。OnBeginPrinting 是CView 的一个虚拟函数,原本什么也没
做。你可以改写它,设定打印前的任何初始状态。
设定AbortProc 。这应该是一个callback 函数,MFC 有一个预设的简易函数
_AfxAbortProc 可兹利用。
CView::OnFilePrint (in VIEWPRNT。CPP)
CView::OnFilePrint
CDC::SetAbortProc (macro; defined in AFXWIN1。INL)
CDC::SetAbortProc
::SetAbortProc (Win32 API)
::SetAbortProc
679
…………………………………………………………Page 742……………………………………………………………
第篇 深入 MFC 程式設計
把父窗口除能,产生【打印状态】对话框,根据文件名称以及输出设备名称,设定对
话盒内容,并显示之:
AfxGetMainWnd()…》EnableWindow(FALSE);
CPrintingDialog dlgPrintStatus(this);
。。。 //设定对话框内容
dlgPrintStatus。ShowWindow(SW_SHOW);
dlgPrintStatus。UpdateWindow();
CView::OnFilePrint (in VIEWPRNT。CPP)
CView::OnFilePrint
CPrintingDialog::CPrintingDialog (in VIEWPRNT。CPP)
CPrintingDialog::CPrintingDialog
CDialog::Create (产生对话框)
CDialog::Create
CWnd::ShowWindow (显示对话框)
CWnd::ShowWindow
StartDoc 通知打印机开始崭新的打印工作。这个函数其实就是激活Windows 打印引擎。
CView::OnFilePrint
CView::OnFilePrint (in VIEWPRNT。CPP)
CDC::StartDoc (macro; defined in AFXWIN1。INL)
CDC::StartDoc
::StartDoc (Win32 API)
::StartDoc
以for 循环针对文件中的每一页开始做打印动作。
调用CView::OnPrepareDC。此函数什么也没做。如果你要在每页前面加表头,就请
改写这个虚拟函数。
修改【打印状态】对话框中的页次。
StartPage 开始新的一页。
680
…………………………………………………………Page 743……………………………………………………………
第 12 章 列印與預樱А�
CView::OnFilePrint
CView::OnFilePrint
CDC::StartPage (macro; defined in AFXWIN1。INL)
CDC::StartPage
::StartPage (Win32 API)
::StartPage
⑤ 调用CView::OnPrint ,它的内部只有一个动作:调用OnDraw 。我们应该在
CScribbleView 中改写OnDraw 以绘出自己的图形。
CView ::OnFilePrint
CView ::OnFilePrint
CView ::OnPrint
CView ::OnPrint
CScribbleView ::OnDraw (我们应该改写OnDraw 以绘出自己的图形)
CScribbleView ::OnDraw
一页结束,调用一页结束,调用dcPrintdcPrint。。EndPageEndPage
CView ::OnFilePrint
CView ::OnFilePrint
CDC::EndPage (macro; defined in AFXWIN1。INL)
CDC::EndPage
::EndPage (Win32 API)
::EndPage
文件结束,调用EndDoc
CView::OnFilePrint
CView::OnFilePrint
CDC::EndDoc
CDC::EndDoc (macro; defined in AFXWIN1。INL)
::EndDoc (Win32 API)
::EndDoc
整个打印工作结束。如果有些什么绘图资源需要释放,你应该改写OnEndPrinting 函
式并在其中释放之。
CView::OnFilePrint
CView::OnFilePrint
CScribbleView::OnEndPrinting
CScribbleView::OnEndPrinting
681
…………………………………………………………Page 744……………………………………………………………
第篇 深入 MFC 程式設計
去除【打印状态】对话框。
将「打印机DC 」解除附着,CPrintInfo 的析构式会把DC 还给Windows 。
从上面这些分析中归纳出来的结论是,一共有六个虚拟函数可以改写,请看图12…5。
Framework 调用次序 建议改写项目
CMyView::OnPreparePrinting 设定Document 长度。调用CView::DoPreparePrinting 以显示
CMyView::OnPreparePrinting 【Print】对话框并产生打印机DC。
CMyView::OnBeginPrinting 设定以DC 为准的Document 长度;配置GDI 资源
CMyView::OnBeginPrinting
CDC::StartDoc
CDC::StartDoc
CMyView::OnPrepareDC 改变viewport 原点、剪截区、以及其它DC 属性。
CMyView::OnPrepareDC
CDC::StartPage
CDC::StartPage
CMyView::OnPrint 列打印头、页尾等等
CMyView::OnPrint
CMyView::OnDraw GDI 绘图动作
CMyView::OnDraw
CDC::EndPage
CDC::EndPage
CDC::EndDoc
CDC::EndDoc
CMyView::OnEndPrinting 释放GDI 资源
CMyView::OnEndPrinting
图12…5 MFC 打印流程与我们的着力点
682
…………………………………………………………Page 745……………………………………………………………
第 12 章 列印與預樱А�
以下是图12…5 的补充说明。
■当使用者按下【File/Print 】命令项, Application Framework 首先调用
CMyView::OnPreparePrinting 。这个函数接受一个CPrintInfo 指针做为参数,允许
使用者设定Document 的打印长度(从第几页到第几页)。预设