Brief Full Advanced Search Search Tips
|  |  | To access the contents, click the chapter and section titles. Fast Track Visual C++ 6.0 Programming (Publisher: John Wiley & Sons, Inc.) Author(s): Steve Holzner ISBN: 0471312908 Publication Date: 09/01/98 Search this book:
Previous | Table of Contents | Next
That completes our overview of CFtpConnection. Next we look at the Web browser control. Figure 8.3 Designing a custom browser. ### Creating a Web Browser In Chapter 2, “Multiple Documents, Multiple Views,” we used HTML views to create a quick Web browser. We can use the Web browser control to do the same thing using controls, not views, and we do that now. Create a new project named Browser, making it a dialog-based project. Next, install the Web browser control in the dialog box that makes up our main window. #### Installing the Web Browser Control Open the main dialog, IDD_BROWSER_DIALOG, in the Dialog Editor, as shown in Figure 8.3. To add the Web browser control, select the Project menu’s Add to Project item, opening the Components and Controls submenu item. This opens the Visual C++ Components and Controls Gallery. Double-click the folder marked Registered ActiveX Controls, find the Microsoft Web Browser item, and click the Insert button. This inserts the Web Browser tool in the control toolbox. Use that tool now to add a new browser control to the dialog window, sizing it so that it matches the one in Figure 8.3. In addition, we use a text box so the user can specify the URL to navigate to and a button to start the navigation. Add those controls, giving the button the caption Navigate, as shown in Figure 8.3. Finally, use ClassWizard to connect a member variable, m_text, to the text box; add a handler function to the button, OnButton1(); and connect a member variable, m_browser, to the Web browser control, IDC_EXPLORER1. Figure 8.4 Browsing the Web with a custom Web browser. We start the code by updating the member variable m_text with UpdateData(). This variable will hold the URL to navigate to, as entered by the user.
    void CBrowserDlg::OnButton1()
     {
        UpdateData(true);                                                  ⇐
            .
            .
            .

    }
Now that we have the URL to navigate to, we use the m_browser control’s Navigate() function to navigate to that new URL. (The last four parameters are pointers to headers and flags that we won’t use, so set to 0).
    void CBrowserDlg::OnButton1()
     {
        UpdateData(true);
        m_browser.Navigate(m_text, 0, 0, 0, 0);                            ⇐

    }
That’s all it takes. Run the Web browser now and navigate to the Visual C++ home page by entering its URL and clicking the Navigate button. As you can see in Figure 8.4, our navigation is successful. We’re now using the Web browser control and writing Web browsers. The code for this example, BrowserDlg.h and BrowserDlg.cpp, appears in Listing 8.3. Listing 8.3 BrowserDlg.h and BrowserDlg.cpp
    // BrowserDlg.h : header file
    //
    //{{AFX_INCLUDES()
    #include “webbrowser2.h”
    //}}AFX_INCLUDES

    #if !defined(AFX_BROWSERDLG_H__B788EA07_A5FC_11D1_887F_D42B07C10710__INCLUDED_)
    #define AFX_BROWSERDLG_H__B788EA07_A5FC_11D1_887F_D42B07C10710__INCLUDED_

    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000

    /////////////////////////////////////////////////////////////////////////////
    // CBrowserDlg dialog

    class CBrowserDlg : public CDialog
    {
    // Construction
    public:
        CBrowserDlg(CWnd* pParent = NULL);    // standard constructor

    // Dialog Data
        //{{AFX_DATA(CBrowserDlg)
        enum { IDD = IDD_BROWSER_DIALOG };
        CWebBrowser2    m_browser;
        CString    m_text;
        //}}AFX_DATA

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CBrowserDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL

    // Implementation
    protected:
        HICON m_hIcon;

        // Generated message map functions
        //{{AFX_MSG(CBrowserDlg)
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg void OnPaint();
        afx_msg HCURSOR OnQueryDragIcon();
        virtual void OnOK();
        afx_msg void OnButton1();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };

    //{{AFX_INSERT_LOCATION}}
    // Microsoft Visual C++ will insert additional declarations immediately
    before the previous line.

    #endif //
    !defined(AFX_BROWSERDLG_H__B788EA07_A5FC_11D1_887F_D42B07C10710__INCLUDED_)

    // BrowserDlg.cpp : implementation file
    //

    #include “stdafx.h”
    #include “Browser.h”
    #include “BrowserDlg.h”

    #ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif

    /////////////////////////////////////////////////////////////////////////////
    // CAboutDlg dialog used for App About

    class CAboutDlg : public CDialog
    {
    public:
        CAboutDlg();

    // Dialog Data
        //{{AFX_DATA(CAboutDlg)
        enum { IDD = IDD_ABOUTBOX };
        //}}AFX_DATA

        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CAboutDlg)
        protected:
        virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
        //}}AFX_VIRTUAL

    // Implementation
    protected:
        //{{AFX_MSG(CAboutDlg)
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    };

    CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
        //{{AFX_DATA_INIT(CAboutDlg)
        //}}AFX_DATA_INIT

    }

    void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CAboutDlg)
        //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
        //{{AFX_MSG_MAP(CAboutDlg)
            // No message handlers
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CBrowserDlg dialog

    CBrowserDlg::CBrowserDlg(CWnd* pParent /*=NULL*/)
        : CDialog(CBrowserDlg::IDD, pParent)
    {
        //{{AFX_DATA_INIT(CBrowserDlg)
        m_text = _T(“”);
        //}}AFX_DATA_INIT
        // Note that LoadIcon does not require a subsequent DestroyIcon in Win32
        m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
    }

    void CBrowserDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
        //{{AFX_DATA_MAP(CBrowserDlg)
        DDX_Control(pDX, IDC_EXPLORER1, m_browser);
        DDX_Text(pDX, IDC_EDIT1, m_text);
        //}}AFX_DATA_MAP
    }

    BEGIN_MESSAGE_MAP(CBrowserDlg, CDialog)
        //{{AFX_MSG_MAP(CBrowserDlg)
        ON_WM_SYSCOMMAND()

        ON_WM_PAINT()
        ON_WM_QUERYDRAGICON()
        ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    /////////////////////////////////////////////////////////////////////////////
    // CBrowserDlg message handlers

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

        // Add “About...” menu item to system menu.

        // IDM_ABOUTBOX must be in the system command range.
      ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
        ASSERT(IDM_ABOUTBOX < 0xF000);

        CMenu* pSysMenu = GetSystemMenu(FALSE);
        if (pSysMenu != NULL)
        {
            CString strAboutMenu;
            strAboutMenu.LoadString(IDS_ABOUTBOX);
            if (!strAboutMenu.IsEmpty())
            {
                pSysMenu->AppendMenu(MF_SEPARATOR);
                pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
            }
        }

        // Set the icon for this dialog.  The framework does this automatically
        //  when the application's main window is not a dialog
        SetIcon(m_hIcon, TRUE);            // Set big icon
        SetIcon(m_hIcon, FALSE);           // Set small icon

        // TODO: Add extra initialization here

        return TRUE;  // return TRUE  unless you set the focus to a control
    }

    void CBrowserDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
        if ((nID & 0xFFF0) == IDM_ABOUTBOX)
        {
            CAboutDlg dlgAbout;
            dlgAbout.DoModal();
        }
        else
        {
            CDialog::OnSysCommand(nID, lParam);
        }
    }

    // If you add a minimize button to your dialog, you will need the code below
    //  to draw the icon.  For MFC applications using the document/view model,
    //  this is automatically done for you by the framework.

    void CBrowserDlg::OnPaint()
    {
        if (IsIconic())
        {
            CPaintDC dc(this); // device context for painting

            SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

            // Center icon in client rectangle
            int cxIcon = GetSystemMetrics(SM_CXICON);
            int cyIcon = GetSystemMetrics(SM_CYICON);
            CRect rect;
            GetClientRect(&rect);
            int x = (rect.Width() - cxIcon + 1) / 2;
            int y = (rect.Height() - cyIcon + 1) / 2;

            // Draw the icon
            dc.DrawIcon(x, y, m_hIcon);
        }
        else
        {
            CDialog::OnPaint();
        }

    }

    // The system calls this to obtain the cursor to display while the user drags
    //  the minimized window.
    HCURSOR CBrowserDlg::OnQueryDragIcon()
    {
        return (HCURSOR) m_hIcon;
    }

    void CBrowserDlg::OnOK()
    {

        // TODO: Add extra validation here

        CDialog::OnOK();
    }

    void CBrowserDlg::OnButton1()
    {
        UpdateData(true);
        m_browser.Navigate(m_text, 0, 0, 0, 0);
    }
### What’s Ahead In the next chapter, we start working with another popular aspect of Visual C++ programming: multithreaded, multitasking programs. Multitasking allows your program to appear to do several things at once, handling tasks in the background while the user is doing something else. We turn to that topic now.
Previous | Table of Contents | Next

| Products | Contact Us | About Us | Privacy | Ad Info | Home Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement.