Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 1001 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 21:

Встраивание возможностей броузера в приложение

< Самостоятельная работа 20 || Самостоятельная работа 21: 123456

Создание поддержки ввода URL

URL (Uniform Resource Locator) - унифицированный указатель ресурса служит для адресации к документам в информационном гиперпространстве Internet. Обратите внимание, что мастер создал заготовку дополнительной панели управления со статической надписью " TODO: layout dialog bar ", указывающей на необходимость ее оформить.

Редактирование ресурса панели управления

Панель управления является гибридом панели инструментов и диалогового окна. Она представляет собой панель инструментов со средствами управления диалогом. Мастер MFC Application Wizard расположил ее не в разделе Toolbar, где и должны находиться панели инструментов, а в разделе Dialog, где располагаются ресурсы диалоговых окно.


Далее мы будем проектировать эту панель как обычный ресурс диалогового окна. На нее можно помещать поля редактирования, кнопки, поля со списком и переключатели - все, что используется в обычных диалоговых окнах.

  • Вызовите на редактирование ресурс диалогового окна IDR_MAINFRAME
  • Измените содержимое текстовой метки на Address и измените свойство Align Text метки на значение Right
  • Дополните ресурс полем редактирования Edit Control

  • Присвойте свойству ID поля редактирования значение IDC_EADDRESS
Передача URL броузеру

Нам не нужно для этого ресурса создавать класс поддержки функциональности, как это было бы необходимо сделать для обычного диалогового окна. Панель управления автоматически посылает свои сообщения классу главного фреймового окна приложения и их можно перенаправить через фрейм в классы представления или документа нашего SDI -приложения.

Воспользуемся тем, что когда пользователь нажимает клавишу Enter после завершения ввода в поле редактирования, этот элемент управления Edit Control посылает фреймовому окну (класс CMainFrame ) идентификатор команды IDOK. Чтобы перехватить и обработать эту команду, нам только требуется добавить обработчик команды в карту сообщений класса CMainFrame (в файл MainFrame.cpp ).

В реализации обработчика команды IDOK необходимо получить текст из поля редактирования на панели управления. Далее можно передать эту строку функции Navigate() класса представления, чтобы заставить броузер найти в сети или внутреннем кэше и отобразить указанную пользователем страницу.

  • В панели Class View выделите класс CMainFrame и щелкните на нем правой кнопкой мыши для создания нового метода

  • Заполните мастер добавления функций так

  • Заполните код функции так
    Функция передачи URL броузеру в файле MainFrm.cpp
    // Функция передачи адреса URL
    void CMainFrame::OnNewAddress(void)
    {
      CString strAddress;
      
      // Получить новый URL
      m_wndDlgBar.GetDlgItem(IDC_EADDRESS)->GetWindowText(strAddress);
      
      // Передать URL в броузер
      ((CWebBrowseView*)GetActiveView())->Navigate(strAddress);
    }

Панель управления была зарегистрирована мастером создания приложений в функции OnCreate() файла MainFrm.cpp под именем m_wndDlgBar как экземпляр класса CDialogBar. Панель управления является родительской для элемента редактирования с идентификатором IDC_EADDRESS. Поэтому при получении содержимого URL мы адресуемся к полю редактирования через нее.

В последней строке кода тип возвращаемого функцией GetActiveView() указателя приводится к указателю на класс CWebBrowseView. Это позволяет вызвать функцию Navigate(), наследуемую представлением от базового класса CHtmlView.

  • Зарегистрируйте созданную функцию как обработчик команды IDOK нажатия клавиши. Для этого в карту сообщений класса CMainFrame вручную внесите следующий код
    Регистрация функции как обработчика сообщения IDOK в карте сообщений класса 
    CMainFrame в файле MainFrm.cpp
    // CMainFrame
      
    IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
      
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
      ON_WM_CREATE()
      ON_COMMAND(IDOK, OnNewAddress)
    END_MESSAGE_MAP()
    ...................................
  • Добавьте в начало файла MainFrm.cpp директивы подключения описаний классов CWebBrowseView и CWebBrowseDoc
    Директивы подключения заголовочных файлов с описаниями классов документа и 
    Дирпредставления вначале файла MainFrm.cpp
    // MainFrm.cpp : implementation of the CMainFrame class
    //
      
    #include "stdafx.h"
    #include "WebBrowse.h"
      
    #include "MainFrm.h"
    #include ".\mainfrm.h"
      
    #include "WebBrowseDoc.h"
    #include "WebBrowseView.h"
      
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
    ..............................................

Если скомпилировать и запустить наше приложение, то можно ввести URL. После нажатия клавиши Enter, если в системе имеется соединение с Internet или настроена локальная PHP -машина (система Денвер-2), то в приложение будет загружена HTML -страница как в настоящем броузере. Это может быть примерно такое...


< Самостоятельная работа 20 || Самостоятельная работа 21: 123456
Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .