当前位置: 首页 > news >正文

jsp 网站开发/技术培训班

jsp 网站开发,技术培训班,项目外包和人力外包的区别,建设一个网站需要哪些方面的开支[IE编程] IE网页截图技术总结 收藏 此文于2010-12-10被推荐到CSDN首页如何被推荐?IE网页截图是IE编程中的经典问题。 IE9 beta发布之后我收到很多关于这方面的问题。 最近我把IE和Windows中这部分相关的代码重新架构了一下,使它们能够在IE9开启硬件加速的…

[IE编程] IE网页截图技术总结 收藏 此文于2010-12-10被推荐到CSDN首页

如何被推荐?

IE网页截图是IE编程中的经典问题。 IE9 beta发布之后我收到很多关于这方面的问题。 最近我把IE和Windows中这部分相关的代码重新架构了一下,使它们能够在IE9开启硬件加速的情况下完美兼容原来GDI函数。 趁着记忆还fresh, 写一个总结以供大家参考。

主要有以下3个接口可以实现IE网页截图。

1) HRESULT IHTMLElementRender::DrawToDC(HDC hDC)

简单代码示例:

view plaincopy to clipboardprint?

IHTMLDocument3 *pDoc = ...;  //得到IHTMLDocument3指针

IHTMLElement *pDocElement = NULL;

pDoc->get_documentElement(&pDocElement );

IHTMLElementRender *pRender =  NULL;

pDocElement ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);

pDocElement->DrawToDC(hImageDC);

IHTMLDocument3 *pDoc = ...;  //得到IHTMLDocument3指针

IHTMLElement *pDocElement = NULL;

pDoc->get_documentElement(&pDocElement );

IHTMLElementRender *pRender =  NULL;

pDocElement ->QueryInterface(IID_IHTMLElementRender, (void **) &pRender);

pDocElement->DrawToDC(hImageDC);

注意事项: Quirks 模式下,documentElement不存在, 请使用BODY元素。

优点: 可以画某个特定的HTML元素

缺点:

需要判断是不是Quirks模式下,进而决定拿documentElement元素还是BODY元素的的指针;

只能按目前屏幕显示大小截取,不支持缩放;

在有些情况就是当网页由frames 组成或者是个内嵌的doc/pdf文档,该可能会失败;

2) HRESULT IViewObject::Draw( DWORD dwAspect, LONG lindex,  void * pvAspect, DVTARGETDEVICE * ptd, HDC hicTargetDev, HDC hdcDraw,  const LPRECTL lprcBounds,

const LPRECTL lprcWBounds, BOOL (*) (DWORD) pfnContinue, DWORD dwContinue )

简单代码示例:

view plaincopy to clipboardprint?

IHTMLDocument2* pDoc = ...;  // 得到IHTMLDocument2指针

IViewObject* pViewObject = NULL;

pDoc->QueryInterface(IID_IViewObject, (void**)pViewObject);

pViewObject->(DVASPECT_CONTENT, 1, NULL, NULL, hScreenDC, hImageDC, rcSource, NULL, NULL, 0);

IHTMLDocument2* pDoc = ...;  // 得到IHTMLDocument2指针

IViewObject* pViewObject = NULL;

pDoc->QueryInterface(IID_IViewObject, (void**)pViewObject);

pViewObject->(DVASPECT_CONTENT, 1, NULL, NULL, hScreenDC, hImageDC, rcSource, NULL, NULL, 0);

优点: 可以缩放,IE会根据传入的lprcBounds自行缩放图片。

缺点:

因为要计算缩放,速度会较慢;

截取整个文档的可见区域,没法截取特定的元素

有些第三方的ActiveX没有实现IViewObject接口,导致那些ActiveX没有出现在截图里面。

3) BOOL PrintWindow( hwnd,  HDC hdcBlt,  nFlags)

简单代码示例:

view plaincopy to clipboardprint?

IWebBrowser2* pIWebBrowser2 = ...; // 得到IWebBrowser2指针

HWND hTridentWnd= NULL;

IOleWindow* pOleWin = NULL;

pIWebBrowser2->QueryInterface(IID_PPV_ARGS(&pOleWin));

pOleWin->GetWindow(&hTridentWnd); // 得到Trident窗口handle (类名"Internet Explorer_Server")

::PrintWindow(hTridentWnd, hImageDC, PW_CLIENTONLY);

IWebBrowser2* pIWebBrowser2 = ...; // 得到IWebBrowser2指针

HWND hTridentWnd= NULL;

IOleWindow* pOleWin = NULL;

pIWebBrowser2->QueryInterface(IID_PPV_ARGS(&pOleWin));

pOleWin->GetWindow(&hTridentWnd); // 得到Trident窗口handle (类名"Internet Explorer_Server")

::PrintWindow(hTridentWnd, hImageDC, PW_CLIENTONLY);

优点: 内容完整,就算ActiveX没有实现IViewObject接口,也会被截图。

缺点:

只能按目前屏幕显示大小截取,不支持缩放;

速度不如IHTMLElementRender::DrawToDC

注:以上代码示例都是简化版,实际使用请检查函数返回值以及指针有效性。

总结

综合考虑, PrintWindow 是首选, 简单而且内容完整。 如果你希望得到缩放的结果,那选择IViewObject::Draw。 如果你想要对特定某个元素截图, 那选择IHTMLElementRender::DrawToDC。

>> 原创文章的版权属于作者,转载请注明出处(http://blog.csdn.net/WinGeek/), 谢谢。 <<

http://www.lbrq.cn/news/1568557.html

相关文章:

  • 兰州网站建设100/河南网站seo
  • 金马国旅网站建设分析/西安seo服务公司
  • 肥城做网站/营销策略的思路
  • 青岛网站建设 新视点/seo培训网
  • 别人的网站是怎么做的/国内重大新闻十条
  • 网站安全防护/推广怎么推
  • 关键词没有排名的网站怎么做/58精准推广点击器
  • 做影视网站的软件/seo刷点击软件
  • 帝国cms做下载网站/杭州seo关键字优化
  • 宣威做网站建设的公司/百度推广app下载安卓版
  • 做微商那个网站好/seo完整教程视频教程
  • 0基础学网站开发/优惠活动推广文案
  • 工作室装修网站源码/网络营销推广方式案例
  • wordpress+怎么改密码忘记/搜索引擎关键词快速优化
  • gis网站开发教程/个人建网站需要多少钱
  • dw软件入门教程/郑州百度推广seo
  • 怎样做电商网站的财务分析/优秀网页设计作品
  • 触动网站建设/宁波seo外包优化
  • 网站关键字语法/深圳市网络品牌推广
  • 5网站开发之美/百度推广优化是什么?
  • 网架公司招聘打板施工队伍/淄博seo培训
  • 中国文化网站建设策划书/网站内部优化有哪些内容
  • 好大夫在线网站官网做提眉的医生/互联网营销师是干什么的
  • 武汉网站优化价格/自助建站
  • h5 响应式手机网站/seo技术快速网站排名
  • 旅游网站毕业论文/天津百度推广排名
  • 做办公室的网站/网站优化网站
  • 网站建设方案书阿里云/唯尚广告联盟
  • 郑州高新区做网站开发的公司/深圳seo优化排名
  • 哪些网站做平面单页好看/页优化软件
  • C#WPF实战出真汁03--登录界面设计
  • 使用EvalScope对GPT-OSS-20B进行推理性能压测实战
  • 线上故障定位:从报警到根因的实战指南
  • 锂电池自动化生产线:智能制造重塑能源产业格局
  • 微软正式将GPT-5接入Microsoft Copilot Studio(国际版)
  • VGG改进(2):基于Local Attention的模型优化