這個功能一般主要是用來生成網(wǎng)站縮略圖的。我查了網(wǎng)上很多資料,大部分都是C#的,卻無C++的。這功能無非就是利用某網(wǎng)頁渲染引擎,生成圖片。而Windows程序員最熟悉的莫過于IE,這東西基于COM技術(shù)封裝得很好,文檔也充足,所以我決定用IE來實現(xiàn)這個功能。
•方法1:
用WebBrowser控件載入網(wǎng)頁,網(wǎng)頁顯示之后可以獲得其窗口的HDC,利用兼容DC,兼容位圖以及BitBlt()來生成圖片,至于什么滾動操作,都是些小問題。 這種方法有個致命缺點,就是WebBrower不能隱藏,而他的父窗口必須置于頂層,不能被遮罩。因此,后臺操作就別想了。
•方法2:
用接口IHTMLElementRender。這個接口可通過IHTMLElement2請求得到。IHTMLElementRender有兩個函數(shù),其中一個是DrawToDC(),畫本元素到一個HDC?梢酝ㄟ^獲得BODY元素接口,請求IHTMLElementRender,然后調(diào)用DrawToDC()輸出到一個兼容DC產(chǎn)生圖片。經(jīng)過測試,這種方法就算WebBrowser及其父窗口隱藏了也有效,因此,完全可以后臺操作。
•問題1,有很多網(wǎng)頁元素是利用方法2不能正確顯示,因此DrawToDC()生成的圖片可能會不正常,或根本不顯示。但是用方法1則完全沒問題。
•問題2,DrawToDC()的輸出范圍是和WebBrowser大小與滾動條息息相關(guān),因此你調(diào)用之前應(yīng)該調(diào)整WebBrowser大小以及滾動條。