There is another approach to this which is based on IViewObject. There is code around to do this in C++ and Delphi, and it shouldn't be too difficult to do in C#; in fact I think someone on one of the newsgroups has already done it with this method. However, note this comment in MSDN:
I've commented on this in the Forum. The key would be to get a .Net wrapper for IViewObject; or else to call the API function OLEDraw which does the same thing. It would be quite interesting if someone could build this functionality into the control, or else post some code. However, it is likely to be memory intensive. Also note this warning from MSDN:
... this technique falls into unsupported territory. The problem is that the product is really not designed or tested to support custom drawing via IViewObject:
raw is a generic ActiveX control interface that is only intended to allow a container that is directly hosting the control to ask that control to draw itself. Here we are using this interface to ask the control to draw itself into some other location. Therefore, it is possible that this technique will not work properly in future versions of Internet Explorer due to drawing optimizations or other modifications made to the product at a later date. In fact, since the WebBrowser control is a windowed control, it normally handles its own painting when hosted in a container without using IViewObject:
raw at all.