Виталий Рычков
Веб-интерфейс в приложениях на Visual C++
В данной статье будут рассмотрены примеры создания приложений с веб-интерфейсом на Visual C++.
В качестве первого примера рассмотрим способ создания модального окна диалога с отображаемой веб-страницей.
Для этого используется динамическая библиотека MSHTML.DLL и её экспортируемая функция ShowHTMLDialog.
Так выглядит этот диалог во время работы приложения...



У этого диалога фиксированные размеры окна, которые задаются внутри приложения.
Чтобы создать такое приложение в Visual C++, нужно создать проект на основе ATL (ATL Project).
В поле Name необходимо написать имя проекта (я свой проект назвал PopupHtm).
В параметрах создаваемого проекта нужно указать, что это будет исполняемый (ЕХЕ) модуль.
Так выглядит окно установки параметров приложения для проекта ATL в Visual C++ 2005...



Далее необходимо нажать кнопку "Finish" и среда разработки создаст новый проект с набором исходных файлов.
Закладка Solution Explorer будет отображать дерево исходных файлов проекта. Первоначально в составе одного решения (Solution) будет находится два проекта: основной (в моём случае это PopupHtm) и дополнительный (у меня PopupHtmPS). Дополнительный проект можно сразу же удалить из решения (Solution), а оставить только основной проект. Так же можно убрать из папки проекта файлы, имена которых совпадают с именем удалённого проекта.
Потом нужно открыть закладку Resource View и зайти в раздел String Table. Там необходимо будет прописать две новые строки с идентификаторами IDS_URL(адрес веб-страницы) и IDS_PARAM (параметры окна диалога).
В моём проекте строка с идентификатором IDS_PARAM имеет значение "dialogHeight:25;dialogWidth:44".
Размеры окна диалога выражены в координатных единицах, которые зависят от заданного системного шрифта для диалоговых окон. Для загрузки строк из ресурсов приложения я воспользовался методом LoadString класса CString.
Для работы с классом CString необходимо в исходный код проекта добавить заголовочный файл ATLSTR.H (лучше это сделать в заголовочном файле проекта STDAFX.H ).
Далее необходимо открыть исходный файл проекта, в котором находится функция WinMain (для моего проекта этот файл называется PopupHtm.cpp). В исходный код данного файла нужно включить заголовочный файл  MSHTMHST.H и добавить в проект библиотеку импорта urlmon.lib (это можно сделать при помощи директивы #pragma).
Затем в функцию WinMain (в коде проекта она выглядит как _tWinMain) необходимо добавить следующий код...
На этом работу по созданию приложения можно считать выполненной. Теперь нужно скомпилировать данный проект и запустить программу на выполнение. Исходный код проекта можно загрузить отсюда: PopupHtm.zip

Теперь рассмотрим способ создания на платформе MFC модального окна диалога с веб-страницей внутри.
Особенность такого решения заключается в том, что HTML-файл находится внутри приложения в составе ресурсов.
При этом платформа MFC обеспечивает доступ к элементам HTML-файла, что даёт возможность динамически управлять его содержимым и считывать из него данные. Класс окна диалога может так же обрабатывать события, которые передаются от элементов веб-страницы.
Так выглядит окно диалога с HTML-файлом в качестве формы ввода данных...



Для реализации такого приложения необходимо создать проект на платформе MFC (MFC Application).
Окно создания проектов для Visual C++ 2005 выглядит так...



В поле Name необходимо указать имя проекта. В моём случае этот проект называется HtmlForm.
Далее необходимо указать тип приложения. В основе данного приложения используется модальный диалог с поддержкой HTML-файлов. Так выглядит окно выбора типа приложения для проекта MFC...



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



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

void CHtmlFormDlg::DoDataExchange(CDataExchange* pDX)
{
  CDHtmlDialog::DoDataExchange(pDX);
  DDX_DHtml_ElementValue(pDX, _T( "idName" ), m_Name);
  DDX_DHtml_ElementValue(pDX, _T( "idFamily" ), m_Family);
  DDX_DHtml_ElementValue(pDX, _T( "idYear" ), m_Year);
}


Загрузить весь исходный код данного проекта можно здесь: HtmlForm.zip
Благодарю за внимание