我有一个两部分的问题。 我需要添加支持打印到现有的基于对话框的MFC项目。 正在打印的文档由HTML组成。 我知道我可以添加基于HTML的对话框,但是如何添加打印function呢?
PS。 我需要这个能够根据程序的需要设置打印页面大小。
受到Marc的Durdin的文章的启发,我做了更多的探讨。 实际上,似乎有一种更简单的方法来提供自定义DEVMODE
和DEVNAMES
,而不使用HTML对话框或自定义IE打印模板进行打印 。 这反过来,应该允许设置自定义打印机,纸张大小,方向等。
我在C ++中有一个游乐场WebBrowser ActiveX主机项目,与此类似。 我在我的OLE站点对象( IOleClientSite
)上实现了IOleCommandTarget
接口。 现在有个有趣的部分,当打印被调用时(通过Ctrl-P或通过IDM_PRINT ),浏览器控件回调站点对象为IOleCommandTarget::Exec(&CGID_DocHostCommandHandler, OLECMDID_PRINT2, &VARIANT(VT_UNKNOWN), NULL)
。 第三个参数包含一个作为IUnknown
传递的对象,但在查询IDispatch
它支持所有通过IDispatch::Invoke
提供的相同的__IE_*
属性 :
__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)
我还没有更进一步,但我认为应该可以改变它们中的任何一个,并从IOleCommandTarget::Exec
返回S_OK
,并期望浏览器控制接受更改。
我期望它的工作方式与IDM_PRINTPREVIEW / OLECMDID_PRINTPREVIEW2类似,但我还没有验证。 随着时间的推移,我会多玩一点。 同时,欢迎您尝试并分享您的结果。