Q156732: HOWTO: Print from the Microsoft WebBrowser Control

Article: Q156732
Product(s): Microsoft C Compiler
Version(s): 4.0,4.01,5.0
Operating System(s): 
Keyword(s): kbole kbprint kbIE300 kbIE301 kbIE400 kbie401 kbMFC kbPrinting kbVC kbIE302 kbhowto
Last Modified: 07-SEP-2001

-------------------------------------------------------------------------------
The information in this article applies to:

- Microsoft Visual C++, 32-bit Enterprise Edition, version 5.0 
- Microsoft Visual C++, 32-bit Professional Edition, version 5.0 
- Microsoft Internet Explorer (Programming) versions 4.0, 4.01 
-------------------------------------------------------------------------------

SUMMARY
=======

The Web Browser component of Internet Explorer 3.x and 4.x does not support a
Print method. You can still print the contents of the Web Browser control using
one of these methods:

- Set focus to the Web Browser control and send a key combination of CTRL+P.

  -or-

- Call the GetDocument() method that returns an IDispatch*. Using the
  IDispatch*, call QueryInterface() on IID_IOleCommandTarget. With the object
  pointer returned, call Exec(NULL, OLECMDID_PRINT,0, NULL,NULL).

MORE INFORMATION
================

The following code can be used to cause the Web Browser control to print its
contents. In this example, m_ctlWebBrowser is an instance of the wrapper class
generated by Class Wizard for the control. m_ctlWebBrowser is contained in a
dialog and initialized in the OnInitDialog function. A Print button on the
dialog is wired to an OnPrint function. The Print button is enabled in response
to the NavigateComplete event of the Web Browser control.


Sample Code
-----------

  BOOL CAboutDlg::OnInitDialog()
     {
         CDialog::OnInitDialog();

         m_ctlWebBrowser.Navigate(_T("http://www.microsoft.com"),
                                  NULL, NULL, NULL, NULL);
         return TRUE;
     }
     

First Method
------------

     
   void CAboutDlg::OnPrint()
     {
         CWnd* pWnd = GetFocus ();

         m_ctlWebBrowser.SetFocus ();
         // send Ctrl-P
         keybd_event (VK_CONTROL, 0, 0, 0);
         keybd_event ('P', 0, 0, 0);

         // set focus to control that previously had focus
         if (pWnd);
             pWnd->SetFocus ();
     }

Second Method
-------------

     // DOCOBJ.H comes with the Internet Client SDK and is installed by
     // default in the "\INetSDK\Include" directory
     #include <docobj.h>

     void CAboutDlg::OnPrint()
     {
         LPDISPATCH lpDispatch = NULL;
         LPOLECOMMANDTARGET lpOleCommandTarget = NULL;

         lpDispatch = m_ctlWebBrowser.GetDocument();
         ASSERT(lpDispatch);

         lpDispatch->QueryInterface(IID_IOleCommandTarget,
                                    (void**)&lpOleCommandTarget);
         ASSERT(lpOleCommandTarget);

         lpDispatch->Release();

         // print contents of web browser control
         lpOleCommandTarget->Exec(NULL, OLECMDID_PRINT, 0, NULL,NULL);

         lpOleCommandTarget->Release();
     }
   

REFERENCES
==========

Internet Client SDK Online documentation.

Additional query words:

======================================================================
Keywords          : kbole kbprint kbIE300 kbIE301 kbIE400 kbie401 kbMFC kbPrinting kbVC kbIE302 kbhowto 
Technology        : kbVCsearch kbIEsearch kbAudDeveloper kbSDKIESearch kbSDKIE400 kbSDKIE401 kbVC500 kbVC32bitSearch kbVC500Search
Version           : :4.0,4.01,5.0
Issue type        : kbhowto

=============================================================================