社区
界面
帖子详情
单文档视图 打印预览 的问题
miaoshengwu
2009-04-01 10:08:32
现在有一单文档程序,
在视图中有一按钮,
如何在打印预览中预览该按钮?
重绘的话,该如何在打印预览中绘?
系统默认的是在视图中TextOut的文字可以预览,
但是像按钮之类的控件就无法预览,该如何做?
...全文
96
1
打赏
收藏
单文档视图 打印预览 的问题
现在有一单文档程序, 在视图中有一按钮, 如何在打印预览中预览该按钮? 重绘的话,该如何在打印预览中绘? 系统默认的是在视图中TextOut的文字可以预览, 但是像按钮之类的控件就无法预览,该如何做?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
用户模态对话框内子
视图
(子窗口)的
预览
和
打印
(之二)
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
VC 实现基于
文档
视图
结构的
打印
.rar
VC 实现基于
文档
视图
结构的
打印
功能,把窗口中所显示的内容,包括表格全部
打印
出来,这种
打印
功能是最常规也是最实用的,源代码部分请参考DocViewPrintView.cpp文件,以下为参数定义: CFont m_titlefont; //标题字体 CFont m_bodyfont; //正文字体 int screenx,screeny; //获取窗口每英寸像素数 int printx,printy; //获取
打印
机每英寸像素数 double xrate,yrate; //
打印
机与屏幕的像素比率 int pageheight; //
打印
纸高度 int pagewidth; //
打印
纸宽度 int leftmargin,rightmargin; //
打印
纸左右边距 BOOL isPreview; //是否处于
预览
状态
用户模态对话框内子
视图
(子窗口)的
预览
和
打印
MFC的
视图
打印
/
预览
功能基于CView::OnFilePrint和CView::OnFilePrintPreview这两个函数 如果要对用户自定义对话框(模态)内的子
视图
(以下简称A
视图
)进行
打印
,直接调用A
视图
的CView::OnFilePrint即可,弹出的“选择
打印
机”对话框同样也是模态对话框,覆盖在用户对话框上。 如果要对用户对话框内的A
视图
进行
预览
,直接调用A
视图
的CView::OnFilePrintPreview后,
预览
视图
(MFC CPreviewView类实例)内虽然
预览
正常,但是挡住了用户对话框。由于用户对话框是模态的,导致
预览
视图
上的“
打印
...”、“上一页”、“下一页”、“放大”、“缩小”、“
单
页/双页”和“关闭”等按钮均无法响应鼠标点击,处于“假死”状态。 解决方法: 在调用A
视图
的CView::OnFilePrintPreview之前,先关闭用户对话框(CDialog::OnCancel),由于这时已不存在用于
预览
的A
视图
,再重新创建一个相同的
视图
(以下简称B
视图
),以B
视图
来启动OnFilePrintPreview进行
预览
。 MFC
视图
预览
的原理是:以主框架窗口(CMainFrame)作为
预览
框架,隐藏原先的子
视图
(用CMainFrame::GetActiveView得到的那个,以下简称C
视图
),用CPreviewView类替换,同时创建包含“
打印
...”、“放大”、“关闭”等按钮的工具栏(CDialogBar类),最后将CPreviewView::m_pPreviewDC作为C
视图
OnDraw的CDC*参数传入,这样,虽然调用的是C
视图
的OnDraw函数,实际上却显示在了CPreviewView
视图
中,起到了“
预览
”的效果。在点击
预览
框架工具栏上的“
打印
...”按钮后, MFC体系将向原先的主框架(本例中和
预览
框架是同一个,都是CMainFrame)发送ID_FILE_PRINT的WM_COMMAND消息。在缺省的配置中,这将启动C
视图
的OnFilePrint,从而在
打印
机上打出C
视图
的内容。 在本例中,为了
打印
B
视图
,需要在CMainFrame中处理WM_COMMAND/ID_FILE_PRINT,加入额外的条件,来判断对按钮“
打印
...”的点击是来自B还是C
视图
的
预览
框架。在本例中用了一个变量CMainFrame::m_nPrintFrom。根据其取值(0或者1),分别启动B或者C
视图
的OnFilePrint。 使用方法: 程序示例在VC++2010上通过。主菜
单
项“
打印
预览
测试”下,有两个子菜
单
项,“对话框用户
视图
的
打印
预览
”用于B
视图
(画出一个圆);“
单
文档
视图
的
打印
预览
”用于C
视图
(画出一个正方形),等同于“文件”主菜
单
项下的“
打印
预览
(V)”。
VS2017 MFC对话框程序
打印
及
打印
预览
的实现程序
研究了网上大量的MFC对话框
打印
及
打印
预览
功能的demo之后,网上现有的版本都比较旧,所以选中了几个版本,合并修改,得到这个比较完美的最新版本,编译无错,成功运行。
绘图编程,
文档
视图
结构。
包括MFC完整的
文档
、
视图
结构,SERIAL编程及
打印
预览
编程以及GID编程.
界面
15,979
社区成员
115,896
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章