SAMPLE: IEZoom.exe Changes the Font Size of WebBrowser Control

ID: Q156693

The information in this article applies to:

SUMMARY

IEZoom.exe demonstrates how to change the font size of the text displayed in a Web Browser control embedded in an MFC container application.

MORE INFORMATION

The following file is available for download from the Microsoft Software Library:

 ~ IEZoom.exe (size: 51155 bytes) 

For more information about downloading files from the Microsoft Software Library, please see the following article in the Microsoft Knowledge Base:

   ARTICLE-ID: Q119591
   TITLE     : How to Obtain Microsoft Support Files from Online Services

Microsoft Internet Explorer (IE) obtains much of its functionality from COM objects implemented in Shdocvw.dll, Mshtml.dll, and Urlmon.dll. The IE application itself is a thin wrapper that aggregates the functionality of these components. Developers who wish to tap directly into the functionality of these underlying components are frequently interested in mimicking the functionality of IE. While many IE features are exposed through the Web Browser (SHDOCVW) control's automation model, other features available on the IE menus, including changing the font size of the text of the current page, are not exposed this way. This sample demonstrates how to use the IOleCommandTarget interface to change the font size of the text of the current page displayed by a WebBrowser control.

The IOleCommandTarget interface consists of two methods, QueryStatus and Exec, in addition to the IUnknown methods. QueryStatus allows the client to determine if an object supports a particular command. If QueryStatus indicates that the specified command is enabled, the client can call Exec to execute or show Help for the command. The list of standard command identifiers is defined in the OLECMDID enumeration in the header file DOCOBJ.H. For more information on the IOleCommandTarget interface, see the Internet Client SDK online documentation.

The sample is a Microsoft Foundation Classes (MFC) 4.2 SDI application that mimics the functionality of the Fonts pop-up under IE's View menu. Both the sample and IE provide the user with five scaling factors: largest, large, medium, small, smallest. While a page is displayed in medium by default, choosing any of the other options scales the text of the page up and down respectively. The following code taken from the sample shows how to accomplish this using the IOleCommandTarget interface:

   void CIezoomView::ChangeScale(IEScaleSize scaleSize)
   {
      HRESULT hr;

      LPDISPATCH pDisp = NULL;
      LPOLECOMMANDTARGET pCmdTarg = NULL;

      if (!m_wb.m_hWnd)
      {
         TRACE("Web Browser Control not yet created.\n")
         return;
      }

      pDisp = m_wb.GetDocument();

      if (!pDisp)
      {
         TRACE("Unable to get document from Web Browser.\n");
         return;
      }

      // The document controls the availability of commands items,
      // so get the OLE command target interface from the document
      hr = pDisp->QueryInterface(IID_IOleCommandTarget,
   (LPVOID*)&pCmdTarg);
      if (pCmdTarg)
      {
         // Now use the command target to do something useful
         // like (un-)zoom the page
         OLECMD rgCmd[1] = {{OLECMDID_ZOOM, 0}};
         // Is the command available for execution?
         hr = pCmdTarg->QueryStatus(NULL, 1, rgCmd, NULL);
         if (SUCCEEDED(hr) && OLECMDF_ENABLED == rgCmd[0].cmdf)
         {
            TRACE("Zoom enabled.\n");
            VARIANT vaZoomFactor;   // Input arguments
            VariantInit(&vaZoomFactor);
            V_VT(&vaZoomFactor) = VT_I4;
            V_I4(&vaZoomFactor) = fontSize;
            hr = pCmdTarg->Exec(NULL, OLECMDID_ZOOM,
                     OLECMDEXECOPT_DONTPROMPTUSER,
                     &vaZoomFactor, NULL);
            VariantClear(&vaZoomFactor);
         }
         else
         {
            TRACE("Unable to query for status of command ;
            (OLECMDID_ZOOM).\n");
         }
      }
      else
      {
         TRACE("Unable to get command target from Web Browser ;
         document.\n");
      }

      if (pCmdTarg) pCmdTarg->Release(); // release document's command
                                            target

      if (pDisp) pDisp->Release(); // release document's dispatch interface
   }

Steps To Run

1. Build the IEZoom sample.

2. Run the IEZoom sample.

If you are connected to the Internet, the ActiveX page on www.microsoft.com will be displayed. If you do not have an Internet connection, modify the Navigate() call in CIezoomView::OnCreate() by passing a different URL.

3. From the View Menu, choose a different font selection.

Additional query words: SCALE SCALING WEBBROWSER

Keywords          : kbfile kbgraphic kbsample kbIE300 kbIE301 kbIE400 kbIE401 kbIE302 AXSDKWebBrowser 
Version           : 1.0
Platform          : WINDOWS

Last Reviewed: January 9, 1999