Встроить приложение WTL в элемент управления ATL ActiveX - PullRequest
0 голосов
/ 06 апреля 2010

Есть ли способ как-нибудь встроить дестопное приложение WTL в ActiveX (то есть расширение) ATL?

Я пытаюсь создать элемент управления ActiveX с помощью средства просмотра офисных файлов. В качестве основы у меня есть настольное приложение WTL (написанное некоторое время назад), которое использует OOo v3 API для отображения документов.

  • Я создал проект ActiveX, связал необходимые библиотеки и включил.
  • Я могу вызывать методы WTL и OO Api.
  • Некоторые свойства и методы были добавлены для удовлетворения требований хост-приложения.
  • Мой ActiveX правильно отображается в ie и главном приложении

И вот моя удача (и знания?) Закончилась.

У моего элемента управления есть свойство m_hwnd, но оно всегда равно 0; Я немного погуглил и обнаружил, что могу получить родительский hwnd с

this->m_spInPlaceSite->GetWindow()

но это тоже не работает. Каждый раз, когда я хочу создать окно, время выполнения заканчивается в методе IsWindow () (вызывается из библиотеки ATL) с parent == null

Чтобы создать и показать OOo :: DocWindow, мне нужен HWND родительского окна.

И здесь встает вопрос:

Могу ли я как-нибудь встроить приложение на основе окна WTL в ActiveX, то есть расширение?
Возможно ли это без переписывания всей оболочки OOo Api?

1 Ответ

1 голос
/ 07 апреля 2010

Да, вы можете.

Шаги с мастером VS:

  1. Создать проект ATL
  2. Добавить элемент управления ATL на основе некоторого элемента управления (например, кнопки). В этом случае у вас будет карта сообщений с некоторыми обработчиками.

Затем замените элемент CContainedWindow на свое собственное окно, и все.

Страница примеров ATL , я не проверял, но надеюсь, что это поможет.

...