Создание элемента управления HTML средствами ATL

   
На этом шаге мы рассмотрим алгоритм создания элемента управления HTML средствами ATL.

   
Средства ATL позволяют создавать элементы управления, способные отображать HTML-страницы.
Элемент управления HTML (HTML Control) содержит элемент управления WebBrowser
и предоставляет указатель на интерфейс IWebBrowser2 Automation, обеспечивающий доступ к объектной
модели DHTML.

   
Как и любой другой элемент управления на базе ATL, HTML-элемент содержит пустой диспетчерский интерфейс,
в который Вы можете добавлять свои методы и свойства, определяя таким образом порядок взаимодействия Вашего элемента
управления с контейнером. Кроме этого, HTML-элемент предоставляет еще один диспетчерский интерфейс, служащий
для связи между кодом на C++ и пользовательским интерфейсом на основе HTML. Последний посредством
диспетчерского интерфейса обращается к коду C++. Это позволяет создавать на языке C++ методы, вызываемые
из сценария HTML-страницы.

   
В HTML-элементе на базе ATL содержится HTML-ресурс - пример пользовательского интерфейса этого
элемента управления, а также метод, демонстрирующий написание функции, которая вызывается пользовательским интерфейсом на основе HTML.

   
Сейчас мы создадим простой элемент управления HTML средствами ATL.

  • Создание проекта MyHtmlControl.
  • В меню File Visual C++ выберите команду New. Создайте проект
    ATL COM AppWizard по имени MyHtmlControl.
  • В окне 1 мастера ATL COM AppWizard примите установки по умолчанию и щелкните Finish.
    Щелкните ОК для завершения создания проекта.
  • Вставка элемента управления HTML.
  • В ClassView щелкните правой кнопкой мыши узел MyHtmlControl classes, а затем -
    New ATL Object. В мастере ATL Object Wizard выберите категорию Controls и далее - HTML Control (рисунок 1).


    Рис.1. Мастер ATL Object Wizard

  • Щелкните Next. На странице Names диалогового окна ATL Object Wizard Properties в поле Short Name
    введите MyHtmlCtrl. Остальные поля заполнятся автоматически (рисунок 2).


    Рис.2. Диалоговое окно ATL Object Wizard Properties

  • Щелкните OK, чтобы добавить в проект элемент управления HTML.
  • В ResourceView дважды щелкните ресурс IDH_MYHTMLCTRL в узле ресурсов HTML, чтобы открыть исходный текст
    HTML-страницы - пользовательского интерфейса элемента управления MyHtmlCtrl. Вот как он выглядит:

    <HTML>
    <BODY id=theBody>
    <BUTTON onclick='window.external.OnClick(theBody, "red");'>Red</BUTTON>
    <BR>
    <BR>
    <BUTTON onclick='window.external.OnClick(theBody, "green");'>
                  Green</BUTTON>
    <BR>
    <BR>
    <BUTTON onclick='window.external.OnClick(theBody, "blue");'>Blue</BUTTON>
    </BODY>
    </HTML>
    

       
    Этот простой DHTML-код определяет три кнопки, каждая из которых реагирует на событие onclick вызовом функции
    OnClick(). Э функция принимает два параметра - идентификатор элемента и строку со значением одного из
    цветов палитры Internet Explorer.

       
    Функция OnClick() не имеет отношения к объектной модели DHTML, а представляет собой метод интерфейса IMyHtmlCtrlUI,
    определенного мастером ATL Object Wizard. Свойства и методы интерфейса IMyHtmlCtrlUI, вызываемые из DHTML-кода
    Вашего элемента управления, задаются посредством объекта window.external.

       
    Ниже приведена реализация функции IMyHtmlCtrlUI::OnClick() из заголовочного файла MyHtmlCtrl.h:

    // Пример метода, вызываемого из HTML для изменения 
    // цвета фона элемента <B0DY> 
    STDMETHOD(OnClick)(IDispatch* pdispBody, VARIANT varColor)
    {
      CComQIPtr<IHTMLBodyElement> spBody(pdispBody); 
      if (spBody != NULL)
        spBody->put_bgColor(varColor); 
      return S_OK; 
    }
    

       
    Функция OnClick() принимает указатель IDispatch на элемент DHTML-страницы и переменную типа
    VARIANT со строкой цвета. OnClick() применяет класс ATL CComQIPtr для получения из диспетчерского
    интерфейса элемента "интеллектуального" указателя на интерфейс IHTMLBodyElement. При успешном получении
    указателя на интерфейс IHTMLBodyElement (элемент <BODY> передан корректно) вызывается метод
    put_bgColor() для задания фонового цвета тела документа.

  • Соберите проект MyHtmlControl, чтобы создать файл MyHtmlControl.dll и зарегистрировать
    ActiveX-элемент MyHtmlCtrl.

   
Созданное приложение можно взять здесь (31,9 Кб).

   
На следующем шаге мы рассмотрим действия, которые надо выполнить для проверки корректности
работы элемента управления MyHtmlCtrl.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий