添加对打印和支持的支持;在基于对话框的MFC应用程序中预览HTML

时间:2013-09-20 22:26:58

标签: c++ windows winapi printing mfc

我有一个由两部分组成的问题。我需要添加支持打印到现有的基于对话框的MFC项目。正在打印的文档是使用HTML组成的。我知道我可以添加基于HTML的对话框,但是如何添加打印功能呢?

PS。我需要这个能够根据程序的需要设置打印页面大小。

1 个答案:

答案 0 :(得分:1)

受到excellent Marc's Durdin's article的启发,我做了更多的探索。 实际上似乎有一种更简单的方式来提供自定义DEVMODEDEVNAMES并在不使用HTML对话框或自定义IE print template的情况下进行打印。反过来,这应该允许设置自定义打印机,纸张大小,方向等。

我在C ++中有一个游乐场WebBrowser ActiveX主机项目,类似于this。我在我的OLE站点对象(IOleCommandTarget)上实现了IOleClientSite接口。现在这是有趣的部分,当调用打印时(通过Ctrl-P或通过IDM_PRINT),浏览器控件将网站对象回调为IOleCommandTarget::Exec(&CGID_DocHostCommandHandler, OLECMDID_PRINT2, &VARIANT(VT_UNKNOWN), NULL)。第3个参数包含一个以IUnknown传递的对象,但在查询IDispatch时,它支持所有相同的__IE_* properties,可通过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以类似的方式工作,但我还没有确认。随着时间的推移,我会更多地玩这个。同时,欢迎您试用并分享您的结果。