OLE-контейнер в программах на Visual C++

В данной статье раccматривается пример использования OLE-объектов в приложениях на Visual C++ при помощи так называемого OLE-контейнера, реализованного на платформе MFC. OLE-объекты чаще всего используются как части составных документов (compound document). К составным документам относятся файлы, создаваемые с помощью приложений Microsoft Office (Excel, Word, PowerPoint и др). При этом сами документы Microsoft Office могут быть использованы как OLE-объекты в других приложениях. В качестве примера создадим собственное приложение, которое будет использовать OLE-объект из Microsoft Office.Для этого необходимо создать в Visual Studio новый проект MFC Application…

Далее в появившемся окне диалога необходимо выбрать каркас будущего приложения. Приложение должно быть создано по архитертуре «Документ-Вид». Интерфейс приложения может быть одно-документным или много-документным (для своего примера я создал приложение как Single document). После этого необходимо нажать кнопку «Next» и выбрать опцию поддержки составных документов в качестве контейнера (Container). Также необходимо установить аттрибут Active document container.

После этого можно сразу нажать кнопку «Finish» или пройти далее по следующим страницам и при необходимости указать свои параметры проекта. В результате получится новый проект, который можно сразу же запустить на компиляцию, а затем полученное приложение запустить. В окне программы нужно выбрать пункт главного меню «Edit⇒Insert New Object…». Далее появится окно диалога со списком OLE-объектов…

Если в качестве примера выбрать объект Microsoft Office Excel Chart, то окно программы после вставки объекта будет выглядеть примерно так…

Данный OLE-объект является активным, т.е. его можно модифицировать: менять стиль диаграммы, вносить изменения в данные, задавать формат представления внутри контейнера.

OLE-контейнер обладает свойством сериализации, т.е может сохранять данные в файл, а затем считывать их обратно из файла. Чтобы сохранить данный объект в файл, нужно выбрать в главном меню программы пункт «File⇒Save As…» и в окне диалога указать имя файла. Для примера сохраним данную диаграмму в файл с именем Chart.ole и закроем приложение. Потом можно снова запустить программу и в главном меню выбрать пункт «File⇒Open…», найти ранее сохранённый файл Chart.ole и открыть его. В результате внутри контейнера должна появиться всё та же диаграмма, которая была сохранена во время предыдущего запуска программы.

С помощью OLE-контейнера можно так же просматривать и редактировать имеющиеся файлы документов Microsoft Office, например: таблицы Excel или презентации PowerPoint, а так же документы Word. Для этого нужно запустить созданное приложение и в главном меню выбрать пункт «Edit⇒Insert New Object…».

После этого в окне диалога для вставки объекта нужно выбрать опцию «Создать из файла», а затем с помощью кнопки «Обзор…» и стандартного окна выбора файлов открыть любой имеющийся документ Microsoft Office. Далее нужно подтвердить выбор указанного файла с помощью кнопки «ОК», в результате чего в контейнере появится содержимое выбранного документа. Формат данных OLE-контейнера отличается от формата файла исходного документа Microsoft Office, поэтому если документ внутри контейнера был изменён, то его нужно будет сохранить в отдельный файл, чтобы не нарушить структуру файла исходного документа.

Исходный код данного проекта можно загрузить отсюда: olecont.zip