Поделиться через


Контейнеры. Реализация контейнера

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

Подготовка класса, производного от CWinApp

  1. Инициализировать библиотеки OLE путем вызова AfxOleInit функции-члена InitInstance .

  2. InitInstance Вызов, CDocTemplate::SetContainerInfo чтобы назначить ресурсы меню и акселератора, используемые при активации внедренного элемента на месте. Дополнительные сведения об этой статье см. в разделе "Активация".

Эти функции предоставляются автоматически при использовании мастера приложений MFC для создания приложения контейнера. См. статью "Создание программы MFC EXE".

Подготовка класса представления

  1. Следите за выбранными элементами, сохраняя указатель или список указателей при поддержке нескольких выбранных элементов. Функция OnDraw должна нарисовать все элементы OLE.

  2. Переопределите IsSelected значение проверка, выбран ли в данный момент элемент.

  3. OnInsertObject Реализуйте обработчик сообщений для отображения диалогового окна "Вставка объекта".

  4. OnSetFocus Реализуйте обработчик сообщений для передачи фокуса из представления в активный внедренный элемент OLE на месте.

  5. OnSize Реализуйте обработчик сообщений для информирования внедренного элемента OLE о том, что он должен изменить прямоугольник, чтобы отразить изменение размера содержащего его представления.

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

Обработка внедренных и связанных элементов

  1. Производный класс от COleClientItem. Объекты этого класса представляют элементы, внедренные или связанные с документом OLE.

  2. Переопределение OnChange, OnChangeItemPositionи OnGetItemPosition. Эти функции обрабатывают изменение размера, позиционирования и изменения внедренных и связанных элементов.

Мастер приложений наследует класс для вас, но, скорее всего, потребуется переопределить OnChange и другие функции, перечисленные с ним на шаге 2 в предыдущей процедуре. Реализация скелета должна быть настроена для большинства приложений, так как эти функции реализуются по-разному от одного приложения к следующему. Примеры этого см. в примерах MFC DRAWCLI и CONTAINER.

Для поддержки OLE необходимо добавить ряд элементов в структуру меню приложения контейнера. Дополнительные сведения об этих параметрах см. в меню и ресурсах: добавления контейнеров.

Вы также можете поддержать некоторые из следующих функций в приложении контейнера:

  • Активация на месте при редактировании внедренного элемента.

    Дополнительные сведения см. в разделе "Активация".

  • Создание элементов OLE путем перетаскивания выделения из серверного приложения.

    Дополнительные сведения см. в разделе "Перетаскивание OLE".

  • Ссылки на внедренные объекты или сочетания приложений контейнера или сервера.

    Дополнительные сведения см. в разделе "Контейнеры: дополнительные функции".

См. также

Контейнеры
Контейнеры. Элементы клиентов