Sheng Jiang

A Microsoft MVP in Visual C++

Home     Contact Me     About Me     Site Map     News     Blog     Where is the forum for      
CSDN Digest
Do and Do Not in C
IE Memory Leak
Synchronous IE Printing
Windows Desktop Search
Zip a folder
What is the Windows API for...
How To Determine When a Page Is Done Printing in WebBrowser Control

 


SUMMARY
The printing from a WebBrowser control can be customized by using custom headers and footers ( http://support.microsoft.com/kb/267240) or replacing the default print template. However, using such techniques conflicts with the PRINT_WAITFORCOMPLETION flag, which is used for synchronous printing.

 

Since Internet Explorer 6.0, the WebBrowser control raises the DWebBrowserEvents2::PrintTemplateTeardown event when a print template has been destroyed. If the printing involves a custom print template, this is a good indicator of print completion. You can create a event handler function in your application for this event to determin if a the WebBrowser control is finished printing a Web page.

MORE INFORMATION

 

The WebBrowser control launches another thread which hosts another browser control and do all printing in the thread. When this thread is finished, if a custom print template is involved, the WebBrowser control destroys the print template and fires PrintTemplateTeardown event. This indicates that the WebBrowser control has completed printing the Web page.

 

If the default print template and the customization of headers and footers are desired, load the template from the source of IExplorer.exe, and use it as a custom template.

 

To translate the asynchronous printing to synchronous, a message loop need to be created (better if use with a timeout handler) .

 

BOOL PrintTemplateTeardownFired=FALSE;
//launch printing
......
//loop until PrintTemplateTeardown is set to TRUE in the PrintTemplateTeardown event handler
MSG msg;
while (!PrintTemplateTeardownFired&&GetMessage(&msg, NULL, 0, 0) > 0)
{
  TranslateMessage(&msg);
  DispatchMessage(&msg);
}

 

Reference