日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

开源项目之在线网页截图工具 IECapt

發布時間:2023/12/29 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 开源项目之在线网页截图工具 IECapt 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ?這個項目是win32程序,就一個目標文件。

? ? ? ? class CEventSink :public CComObjectRootEx <CComSingleThreadModel>,?public IDispatch 實現了網頁接口的事件接收器。

? ? ? ??class CMain :public CWindowImpl <CMain> 窗口主要界面,快照的實現(獲得網頁接口對象)。

? ? ? ?

? ? ? 快照實現部分:

// // Implementation of CMain::SaveSnapshot // BOOL CMain::SaveSnapshot(void) { long bodyHeight, bodyWidth, rootHeight, rootWidth, height, width;CComPtr<IDispatch> pDispatch;// TODO: "If the document object type is not safe for scripting, // this method returns successfully but sets ppDisp to NULL. For // Internet Explorer 7 and later, the return code is S_FALSE..."//獲得對象 HRESULT hr = m_pWebBrowser->get_Document(&pDispatch);if (FAILED(hr)) return true;//獲得ihtml接口 CComPtr<IHTMLDocument2> spDocument; hr = pDispatch->QueryInterface(IID_IHTMLDocument2, (void**)&spDocument);if (FAILED(hr)) return true;//獲得內容 CComPtr<IHTMLElement> spBody; hr = spDocument->get_body(&spBody);// Apparently with MSHTML failing to get the body is not a failure, // so if there is no HTML body to get, which may be the case with // SVG images loaded directly, this succeeds but sets spBody to the // NULL pointer, leading to a crash. I am not sure how to obtain // the sizing information for SVG documents so this errors out here. // A work around would be the make HTML host documents or wrapping // the SVG code in a XHTML document, but that may break scripts. if (FAILED(hr) || spBody == NULL) return true;//查找相關接口 CComPtr<IHTMLElement2> spBody2; hr = spBody->QueryInterface(IID_IHTMLElement2, (void**)&spBody2);if (FAILED(hr)) return true;hr = spBody2->get_scrollHeight(&bodyHeight);if (FAILED(hr)) return true;hr = spBody2->get_scrollWidth(&bodyWidth);if (FAILED(hr)) return true;CComPtr<IHTMLDocument3> spDocument3; hr = pDispatch->QueryInterface(IID_IHTMLDocument3, (void**)&spDocument3);if (FAILED(hr)) return true;// We also need to get the dimensions from the <html> due to quirks // and standards mode differences. Perhaps this should instead check // whether we are in quirks mode? How does it work with IE8? CComPtr<IHTMLElement> spHtml; hr = spDocument3->get_documentElement(&spHtml);if (FAILED(hr)) return true;CComPtr<IHTMLElement2> spHtml2; hr = spHtml->QueryInterface(IID_IHTMLElement2, (void**)&spHtml2);if (FAILED(hr)) return true;hr = spHtml2->get_scrollHeight(&rootHeight);if (FAILED(hr)) return true;hr = spHtml2->get_scrollWidth(&rootWidth);if (FAILED(hr)) return true;width = bodyWidth; height = rootHeight > bodyHeight ? rootHeight : bodyHeight;// TODO: What if width or height exceeds 32767? It seems Windows limits // the window size, and Internet Explorer does not draw what's not visible. ::MoveWindow(m_hwndWebBrowser, 0, 0, width, height, TRUE);CComPtr<IViewObject2> spViewObject;// This used to get the interface from the m_pWebBrowser but that seems // to be an undocumented feature, so we get it from the Document instead. hr = spDocument3->QueryInterface(IID_IViewObject2, (void**)&spViewObject);if (FAILED(hr)) return true;RECTL rcBounds = { 0, 0, width, height };_TCHAR* tcsExt = _tcsrchr(m_fileName, '.'); if (tcsExt && _tcscmp(_T(".emf"), tcsExt) == 0) {USES_CONVERSION; HDC hdcMain = GetDC(); int iWidthMM = GetDeviceCaps(hdcMain, HORZSIZE); int iHeightMM = GetDeviceCaps(hdcMain, VERTSIZE); int iWidthPels = GetDeviceCaps(hdcMain, HORZRES); int iHeightPels = GetDeviceCaps(hdcMain, VERTRES); Gdiplus::RectF rcBoundsX(0, 0, (Gdiplus::REAL)width, (Gdiplus::REAL)height);rcBoundsX.Y *= iHeightMM * 100 / iHeightPels; rcBoundsX.X *= iWidthMM * 100 / iWidthPels; rcBoundsX.Width *= iWidthMM * 100 / iWidthPels; rcBoundsX.Height *= iHeightMM * 100 / iHeightPels; Gdiplus::Metafile emf(T2W(m_fileName), hdcMain, rcBoundsX, Gdiplus::MetafileFrameUnitGdi, Gdiplus::EmfTypeEmfPlusDual, L"[TODO: Description]");//獲得圖片 Gdiplus::Graphics g(&emf); HDC imgDc = g.GetHDC();// For unknown reasons Internet Explorer will sometimes // fail to draw glyphs for certain characters here even // though they are rendered in Internet Explorer itself. // On other pages, Internet Explorer will simply render // a single bitmap into the emf which isn't really what // this should do. I've no idea how to fix that however.hr = spViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, imgDc, imgDc, &rcBounds, NULL, NULL, 0);g.ReleaseHDC(imgDc); ReleaseDC(hdcMain);return false; }CImage image;// TODO: check return value; // TODO: somehow enable alpha image.Create(width, height, 24);HDC imgDc = image.GetDC(); hr = spViewObject->Draw(DVASPECT_CONTENT, -1, NULL, NULL, imgDc, imgDc, &rcBounds, NULL, NULL, 0); image.ReleaseDC();//保存 if (SUCCEEDED(hr)) hr = image.Save(m_fileName);return false; }

? ? ?學習的目的是成熟!~?

? ? ? ? 源碼下載




總結

以上是生活随笔為你收集整理的开源项目之在线网页截图工具 IECapt的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲成人不卡 | 免费黄网在线观看 | 天天干天天日夜夜操 | 成人在线观看国产 | 欧美日韩一区不卡 | 亚洲情射| 午夜精产品一区二区在线观看的 | 狠狠干精品 | 国产精品地址 | 超污视频在线观看 | 国产 欧美 日韩 在线 | av一区二区三区 | 亚洲高潮av| 丰满肥臀噗嗤啊x99av | 屁屁影院国产第一页 | 国产精品久久久久久99 | 日本福利视频导航 | 日日免费视频 | 久久综合干 | 激情亚洲 | 国产免费黄网站 | 亚洲精品乱码久久久久久蜜桃91 | 日韩综合另类 | 三年中文在线观看免费观看 | 欧美成人做爰大片免费看黄石 | 好吊妞视频在线观看 | 欧美日本在线视频 | 亚洲一区精品在线观看 | 69网址 | 日韩欧美偷拍 | 性猛交富婆╳xxx乱大交天津 | 福利片第一页 | 97超碰导航 | 日韩欧美一区二区三区四区 | 国产九九热 | jizzjizz欧美69巨大 | 五月天激情四射 | 一区三区视频 | 欧美日韩国产在线观看 | 久久久久久高清 | 啪啪福利视频 | xxxx精品| 99色国产 | 视频一区国产 | 欧美又大又硬又粗bbbbb | 国产区一区二区三区 | 日本不卡一区二区三区在线观看 | 人妻激情偷乱视频一区二区三区 | 欧美黄色片网站 | 中文字幕免费高清网站 | 欧美日韩精品一区二区三区四区 | 中日韩在线 | 免费av一区二区三区 | 猛男大粗猛爽h男人味 | 日韩少妇一区二区 | 香蕉视频日本 | 97精品国产 | 18被视频免费观看视频 | 日本一区二区久久 | 欧美成综合 | 一级片毛片 | 夫妻自拍偷拍 | 麻豆人妻少妇精品无码专区 | 久久久久久久久久国产精品 | 亚洲国产一区二区在线观看 | 懂色av中文一区二区三区天美 | 久久综合久久88 | 国产亚洲欧美在线精品 | 啪啪综合| 自拍啪啪 | 在线国产视频 | 中文字幕免 | 非洲黑寡妇性猛交视频 | 国产毛片在线看 | 国产伦精品一区二区三区网站 | 欧美日韩18 | 91蜜桃| 亚洲欧美国产高清 | 原来神马电影免费高清完整版动漫 | 一区二区精品视频在线观看 | 少妇特黄a一区二区三区88av | 黄色理论视频 | 粉嫩av一区二区三区免费观看 | 91精品视频国产 | 一区国产在线 | 国产视频污在线观看 | 欧美黄在线观看 | 91久久综合亚洲鲁鲁五月天 | 日韩tv | 成人毛片软件 | 国产日日夜夜 | 成年人网站免费观看 | 日韩欧美字幕 | 欧美a级成人淫片免费看 | 嫩草视频在线播放 | 久久一区二区三区四区 | 成人午夜免费毛片 | 亚洲熟妇无码爱v在线观看 九色福利 | 日韩av中文字幕在线 |