1

简介及相关资料:

我正在维护一个旧应用程序,我需要实现基于从数据库计算的数据生成报告的功能。用户还必须有打印文件的附加选项(用户必须能够选择打印机,并且必须能够看到打印预览)。

为了提高我得到满意答案的机会,请允许我用一个小“例子”来说明问题:

  • 用户按下按钮 -> 应用程序计算数据;// 完毕

  • 应用程序创建文件并用结果填充它;// 完毕

  • 通知用户生成报告;// 完毕

  • 用户按下另一个为打印收费的按钮;// 卡在这里!

  • 弹出打印预览和运行打印对话框的选项。 // 卡在这里

  • 用户启动打印对话框,选择打印机和应用程序打印文件;

C++该应用程序是使用 raw WinAPI( no )编码的MFC。我正在使用 Windows XP。

问题:

我能够成功使用OLE 自动化生成/保存WordExcel报告,但我无法创建与 Word 将创建的打印预览完全匹配的打印预览。

如果我使用OLE 自动化显示Excel 的打印对话框/打印预览,可能会出现以下问题:

用户可以简单地点击“关闭打印预览”,或者可以简单地关闭打印属性表(见下图)并返回到可能会破坏文档数据的文档

在此处输入图像描述

我的雇主不喜欢这样(他们没有软件工程/开发背景,所以无论我说什么最终都会成为“风中的回声”......)并且他们希望我的打印预览与打印预览完全匹配Word 生成。

因此,我需要一种为用户生成打印预览的解决方案,其方式与 Word 将创建的打印预览完全匹配。此外,用户应该只能看到它的样子,但不能从我的应用程序中打开文件。用户应该能够选择将打印文件的打印机。

与图片中的实现类似的实现就可以了。

问题:

介绍性说明:

这个问题太宽泛,无法在一篇文章中回答,所以我必须限制自己只寻求建议/一般概念/指向正确的方向。

实际问题:

我在OLE 自动化Excel / Word文件方面尽了最大努力,但正如您所见,生成打印预览存在问题,因此有以下问题:

  1. 由于这是我第一次处理此类任务,您能否推荐我处理它的正确方法(当然是一般概念)?

  2. 是否有可能解决我的打印问题(例如将WM_PRINTCLIENT消息发送到Word/Excel或类似的东西)?

评论 :

再一次,我意识到这个问题太宽泛了,所以只给我一般的概念/指针,这样如果我在某个地方卡住了,我可以发布单独的问题。

我不需要使用Word / ExcelOLE 自动化,这是我目前的选择。

如果您能推荐更好的解决方案,我将很乐意接受。我不想使用图书馆。

如果需要其他信息,请询问,我将编辑我的帖子。

4

1 回答 1

1

You would need to bring up a dialog box when the user clicks the print button, the dialog box would contain a control that shows the preview for the default printer and three buttons to select another printer, print and exit.

The preview control could be a static control where the WM_PAINT handler would draw the preview (alternatives: a Web Browser control which is fed html text or a RichText control which is fed RTF text, but then you are constrained by the functionality of these controls).

Quote: Print preview isn't that special. It just means that you have to render to screen (or bitmap) what you'd otherwise would render to the printer DC. This primarly means using the page size, and providing a UI control for the prev/next page.

This SO Answer describes in detail the work you need to do to paint the preview.

This CodeProject article has some simple code for print-preview; it's in simple MFC which should not be too difficult to translate to plain C++/WinAPI.

于 2014-06-02T08:32:00.087 回答