这个功能一般主要是用来生成网站缩略图的。我查了网上很多资料,大部分都是C#的,却无C++的。这功能无非就是利用某网页渲染引擎,生成图片。而Windows程序员最熟悉的莫过于IE,这东西基于COM技术封装得很好,文档也充足,所以我决定用IE来实现这个功能。
•方法1:
用WebBrowser控件载入网页,网页显示之后可以获得其窗口的HDC,利用兼容DC,兼容位图以及BitBlt()来生成图片,至于什么滚动操作,都是些小问题。 这种方法有个致命缺点,就是WebBrower不能隐藏,而他的父窗口必须置于顶层,不能被遮罩。因此,后台操作就别想了。
•方法2:
用接口IHTMLElementRender。这个接口可通过IHTMLElement2请求得到。IHTMLElementRender有两个函数,其中一个是DrawToDC(),画本元素到一个HDC。可以通过获得BODY元素接口,请求IHTMLElementRender,然后调用DrawToDC()输出到一个兼容DC产生图片。经过测试,这种方法就算WebBrowser及其父窗口隐藏了也有效,因此,完全可以后台操作。
•问题1,有很多网页元素是利用方法2不能正确显示,因此DrawToDC()生成的图片可能会不正常,或根本不显示。但是用方法1则完全没问题。
•问题2,DrawToDC()的输出范围是和WebBrowser大小与滚动条息息相关,因此你调用之前应该调整WebBrowser大小以及滚动条。