【发布时间】:2014-04-23 04:27:08
【问题描述】:
我有一个包含多个子 HWND 的窗口(在屏幕外创建)的应用程序。如何打印?
我调用 PrintDdlg() 并获取打印 DC,很好。但是我如何告诉主窗口在 StartPage() / EndPage() 调用之间进行绘制?看来我得手动遍历孩子并调用绘制代码?或者我是否将 WM_PRINT(或 WM_PAINT?)消息发送到顶层窗口。
我可以在屏幕上打印一些东西,但并不明显我做得对。
例如:如果我为子窗口绘图,我通常会获取子窗口 DC 并使用它。但这会起作用吗,还是我只需要使用打印 DC - 换句话说,子窗口 DC 是否足够聪明,可以查看最高父级并确定我们正在打印?
我想如果有人看过这方面的一些最佳实践,我会很想看到它们。我能找到的所有打印文档都是简单的例子。
这是在 C++ 中,基本上是原始的 Win32 我正在更新十年前的打印循环。
现在我的解决方案是手动从后到前遍历窗口层次结构并告诉每个子窗口进行绘制。我遇到了文本缩放、原点(我可以看到的每个子窗口都在左上角绘制)和其他问题。当然,这些都可以手动修复。我现在要花几个小时看看实施 WM_PRINT 是否可行。 WM_PRINT 上的所有示例都涉及获取微观位图以绘制到基于内存的 DC 中。但是 WM_PRINT 的文档让人认为它是用于打印的。
【问题讨论】:
-
你用什么语言做这个?你用的是MFC之类的框架吗?
-
在我编辑时 - 我正在更新一个旧的应用程序,该应用程序可以打印,但会损坏。它是一个 C++ 应用程序,它有自己的基于 C 的框架。
-
我相信如果窗口不可见,它就不会被绘制?
-
你应该解释什么有效,什么不再有效,以及你做了什么改变。你使用
PrintWindowAPI 吗? -
您使用的是文档视图模式还是类似的模式?
标签: c++ windows winapi printing gdi