2

I have a two-part question. I need to add supporting for printing to an existing dialog-based MFC project. The document being printed is composed using HTML. I know that I can add HTML-based dialog but how do you add a capability for printing to it?

PS. I need this to be able to set the print page size according to a program's needs.

4

1 回答 1

1

Marc 的 Durdin 优秀文章的启发,我做了更多探索。实际上似乎有一种更简单的方法来提供自定义DEVMODEDEVNAMES打印,而无需使用 HTML 对话框或自定义IE 打印模板。反过来,这应该允许设置自定义打印机、纸张尺寸、方向等。

我有一个 C++ 中的 Playground WebBrowser ActiveX 宿主项目,类似于这个IOleCommandTarget我在我的 OLE 站点对象 ( IOleClientSite)上实现了接口。现在这是有趣的部分,当调用打印时(通过 Ctrl-P 或通过IDM_PRINT),浏览器控件将站点对象回调为IOleCommandTarget::Exec(&CGID_DocHostCommandHandler, OLECMDID_PRINT2, &VARIANT(VT_UNKNOWN), NULL). 第三个参数包含一个作为 传递的对象IUnknown,但是当查询它时,IDispatch它支持所有相同的__IE_*属性,可通过以下方式获得IDispatch::Invoke

__IE_TemplateUrl (VT_EMPTY)
__IE_ParentHWND (VT_UINT)
__IE_HeaderString (VT_BSTR)
__IE_FooterString (VT_BSTR)
__IE_OutlookHeader (VT_UNKNOWN)
__IE_BaseLineScale (VT_INT)
__IE_uPrintFlags (VT_UINT)
__IE_ContentDocumentUrl (VT_BSTR)
__IE_ContentSelectionUrl (VT_BSTR)
__IE_PrinterCMD_Printer (VT_BSTR)
__IE_PrinterCMD_Device (VT_BSTR)
__IE_PrinterCMD_Port (VT_BSTR)
__IE_BrowseDocument (VT_UNKNOWN)
__IE_TemporaryFiles (VT_ARRAY)
__IE_PrinterCMD_DevNames (VT_I4)
__IE_PrinterCMD_DevMode (VT_I4)
__IE_PrintType (VT_BSTR)

我还没有更进一步,但我认为应该可以更改其中的任何一个并S_OK从中返回IOleCommandTarget::Exec,并期望浏览器控件接受更改。

我希望它以类似的方式为IDM_PRINTPREVIEW / OLECMDID_PRINTPREVIEW2 工作,但我还没有验证过。如果时间允许,我会多玩一点。同时,欢迎您尝试并分享您的结果。

于 2013-09-22T11:29:39.793 回答