Краткая формулировка. Хочу уже открытый невидимым вордом объект Word.Document отобразить в окне своего приложения. За какой интерфейс его нужно подцепить?
Развёрнутая формулировка. Пишу приложение (на базе библиотеки Qt, ver 4.1.4), которое должно, в частности, пользоваться услугами MSWord'a и обрабатывать с его помощью вордовские документы. Обработка должна вестись двояко: 1) ворд невидим, моё приложение просто командует им по IDispatch, открывая, изменяя и сохраняя документы, -- с этим всё в полном порядке; 2) в окне моего приложения должны открываться вордовские документики, те самые, которые открывались невидимыми, -- и вот здесь есть затруднения.
Qt позволяет создать визуальный элемент (виджет), привязав его к COM-интерфейсу, который приложение откуда-то получило (откуда его берёт приложение -- Qt не волнует). Я хочу: 1) в невидимом ворде открыть определённый документ, при этом я получаю интерфейс объекта _Document;
2) теперь из этого интерфейса получить интерфейс (какой?), отвечающий за визуальное отображение, который я и передам в конструктор визуального элемента своего приложения
Вопрос: какой интерфейс мне нужно запрашивать? Еяли я что-либо понимаю, то IViewObject, но изучение через OleView показало, что _Document такой интерфейс не поддерживает. Пробовал наугад IOleObject -- но это даёт совершенно пустой виджет.
Переформулировка вопроса с точки зрения объектной модели Word: какой подобъект объекта _Document отвечает за отображение содержимого документа и, соответственно, имеет интерфейс IViewObject?
Попутно: на Qt-шном форуме доводилось слышать мнение, что Word.Document вообще нельзя использовать в качестве ActiveX Control. Может ли уважаемый All авторитетно подтвердить или опровергнуть это мнение? По крайней мере, мой опыт показал, что работа с Word'ом, когда документ открыт в виджете, очень нестабильна: Word перестаёт обрабатывать некоторые вполне законные вызовы (когда работа идёт без встраиваения документа в моё окно, эти вызовы отрабатывают чётко).
Боковое ответвление вопроса: а может вообще есть подходящий ActiveX control, которому можно передать имя файла, и он сам его откроет и отобразит?
Заранее благодарю за любые направляющие затрещины
ЗЫ. Ещё раз подчеркну интересный аспект. Проблема в том, как по невидимому объекту получить видимый. Обратная задача решается средствами Qt вообще элементарно, а вот эта... На крайний случай Qt позволил бы открыть документ по имени файла заново -- один раз он оборачивается в QAxObject (невидимый), другой раз в QAxWidget (видимый). Но изящнее было бы именно что выцепить интерфейс для отображения уже существующего объекта.
Источник нашей мудрости -- наш опыт. Источник нашего опыта -- наша глупость.