How do I render the scrollable regions of a canvas with IViewObject::Draw?

浪尽此生 提交于 2019-12-22 10:43:55

问题


I've been trying to render the entire canvas in an IWebBrowser2 control to a bitmap. IViewObject::Draw seems to be the most promising approach, but I can't get it to render anything that would requires a scroll to show. While I could automate the scrolling and stitch the images together, this would look weird with any fixed position elements. Is this even doable?

Additionally, I've tried to set the controller's size to one that would allow the entire contents to display without needing to scroll, but Windows caps the max size to the current screen resolution, so that only gets me partially there.

Any help would be much appreciated. I'm currently doing this in the context of Win7 and IE8, but I don't think that should matter much.


回答1:


Sorry it took so long for me to follow up with the answer to this.

I wrote up an article detailing how to trick Windows into allowing you to resize a window larger than the virtual screen resolution, allowing functions like PrintWindow or IViewObject::Draw to capture the entire client area (i.e., the browser canvas).

http://nirvdrum.com/2010/03/25/how-to-take-full-page-or-full-canvas-screenshots-in-windows.html

An actual implementation of the technique can be found in my SnapsIE repository on GitHub (username: nirvdrum). Unfortunately I don't have enough karma to post two hyperlinks. The repository is linked from the article though.




回答2:


It is very likely an IE optimisation that avoid to draw more than required. You might be able to scroll the window and call IViewObject::Draw in a loop without any animation occuring ?

I'm surprised that Windows caps the max size to the current screen resolution. Are you sure about that ?



来源:https://stackoverflow.com/questions/2159607/how-do-i-render-the-scrollable-regions-of-a-canvas-with-iviewobjectdraw

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!