文件名称:用户模态对话框内子视图(子窗口)的预览和打印(之二)
文件大小:156KB
文件格式:RAR
更新时间:2017-08-05 19:06:33
VC2010 对话框 视图 预览 打印
MFC的视图打印/预览功能基于CView::OnFilePrint和CView::OnFilePrintPreview这两个函数。 如果要对用户自定义对话框(模态)内的子视图进行打印,直接调用该视图的CView::OnFilePrint即可,弹出的“选择打印机”对话框同样也是模态对话框,覆盖在用户对话框上。 如果要对用户对话框内的视图进行预览,直接调用该视图的CView::OnFilePrintPreview后,预览视图(MFC CPreviewView类实例)内虽然预览正常,但是挡住了用户对话框。由于用户对话框是模态的,导致预览视图上的“打印...”、“上一页”、“下一页”、“放大”、“缩小”、“单页/双页”和“关闭”等按钮均无法响应鼠标点击,处于“假死”状态。 解决方法: 第一个解决方法是先关闭用户对话框,再启动预览,详见http://download.csdn.net/detail/oliver_zheng/7639379 第二个解决方法仍然保持用户对话框,但是由于对话框为模态,无法利用主框架窗口CMainFrame作为预览框架,因此要另外创建并显示一个框架窗口(CFrameWnd的派生类),作为预览窗口。 另外创建的框架窗口类名为CPrintPreviewFrameWnd,其对应的单文档视图是CViewPrintPreview类,利用这些关联信息创建一个单文档模板,利用此单文档模板创建框架窗口,并在其内嵌视图(CViewPrintPreview类)中保存原主框架(CMainFrame)、用户对话框和其上需要打印的视图(CTestView)。然后基于CViewPrintPreview类启动预览和打印(具体过程详见第一个解决办法)。由于CViewPrintPreview的各个相关虚函数诸如OnPreparePrinting、OnBeginPrinting、OnPrepareDC、OnPrint和OnEndPrinting都被重载,用于调用真正需要打印的视图CTestView的各自函数,因此CViewPrintPreview实际上只是个“中介”视图,是连接预览视图(MFC CPreviewView类)和CTestView的桥梁。 当打印或者预览结束后,关闭自行创建的框架窗口CPrintPreviewFrameWnd,利用CViewPrintPreview类中实现保存的信息恢复主框架和用户对话框,恢复打印/预览前的环境。 代码(实现了第二个解决方法)在VC2010下编译通过。第一个解决方法的源码详见http://download.csdn.net/detail/oliver_zheng/7639379
【文件预览】:
PrintPreview2
----Debug()
----PrintPreview.suo(82KB)
----ipch()
--------printpreview-2c93722d()
----PrintPreview()
--------TestView.cpp(2KB)
--------resource.h(2KB)
--------PrintPreview.aps(116KB)
--------Debug()
--------TestView.h(821B)
--------PrintPreviewDoc.h(883B)
--------PrintPreview.rc(22KB)
--------PrintPreview.cpp(4KB)
--------stdafx.h(2KB)
--------ViewPrintPreview.cpp(2KB)
--------ReadMe.txt(4KB)
--------PrintPreviewDoc.cpp(3KB)
--------PrintPreviewView.h(1KB)
--------res()
--------ViewPrintPreview.h(1KB)
--------PrintPreview.vcxproj(6KB)
--------PrintPreviewFrameWnd.h(501B)
--------MainFrm.h(975B)
--------stdafx.cpp(145B)
--------PrintPreviewFrameWnd.cpp(2KB)
--------PrintPreview.vcxproj.filters(3KB)
--------PrintPreview.h(542B)
--------MainFrm.cpp(2KB)
--------PrintPreviewDlg.cpp(2KB)
--------PrintPreviewDlg.h(695B)
--------PrintPreview.vcxproj.user(143B)
--------targetver.h(234B)
--------PrintPreviewView.cpp(2KB)
----PrintPreview.sln(903B)