Приветствую, коллеги!
Дано: из Qt-приложения (4.1.4) работаю с Wordом, невидимым или в собственном окне Wordа -- здесь всё элементарно.
Нужно: для вордовского документа, который уже обёрнут в QAxObject, создать также обёртку в QAxWidget -- чтобы отобразить документ в окне моего приложения. Как?
Теперь это же, но подробно.
Создаю интерфейс к MSWord:
QAxObject *word = new QAxObject( "Word.Application" );
Получаю интерфейсы к его подобъекту "коллекция открытых документов":
QAxObject *docs = word->querySubObject( "Documents()" );
Создаю новый документ:
QAxObject *docAsIface = docs->querySubObject( "New()" );
до этих пор всё работает превосходно. Нужно теперь как-то на основе docAsIface построить виджет. У класса QAxWidget есть конструктор, у которого единственный параметр -- указатель на COM-интерфейс. А у класса QAxObject есть метод queryInterface, который позволяет получить любой интерфейс COM-объекта. Я пытаюсь сделать так:
IUnknown *unk = NULL;
docAsIface->queryInterface( XXXXXXX, (void**) &unk ); // здесь самое главное!
QAxWidget *docAsWidget = new QAxWidget( unk );
Основной вопрос: какой же интерфейс запрашивать у документа, чтобы из этого интерфейса можно было построить виджет?
Т.е. какой IID подставлять вместо XXXXXXX?
Попутно. Кто-нибудь из коллег делал класс виджета для вордовского документа? Я-то свой написал, но меня не покидает ощущение, что кто-то мог это реализовать гораздо изящнее.
Попутно 2. На тролльтеховском форуме кто-то говорил, что вордовский документ вообще не следует пытаться делать ActiveX-controlом, с вордо якобы можно работать только как с COM-объектом :-(
С другой стороны, следующий код у меня работает:
QAxWidget *docAsWidget = new QAxWidget( "Word.Document" );
docAsWidget->show();
Дано: из Qt-приложения (4.1.4) работаю с Wordом, невидимым или в собственном окне Wordа -- здесь всё элементарно.
Нужно: для вордовского документа, который уже обёрнут в QAxObject, создать также обёртку в QAxWidget -- чтобы отобразить документ в окне моего приложения. Как?
Теперь это же, но подробно.
Создаю интерфейс к MSWord:
QAxObject *word = new QAxObject( "Word.Application" );
Получаю интерфейсы к его подобъекту "коллекция открытых документов":
QAxObject *docs = word->querySubObject( "Documents()" );
Создаю новый документ:
QAxObject *docAsIface = docs->querySubObject( "New()" );
до этих пор всё работает превосходно. Нужно теперь как-то на основе docAsIface построить виджет. У класса QAxWidget есть конструктор, у которого единственный параметр -- указатель на COM-интерфейс. А у класса QAxObject есть метод queryInterface, который позволяет получить любой интерфейс COM-объекта. Я пытаюсь сделать так:
IUnknown *unk = NULL;
docAsIface->queryInterface( XXXXXXX, (void**) &unk ); // здесь самое главное!
QAxWidget *docAsWidget = new QAxWidget( unk );
Основной вопрос: какой же интерфейс запрашивать у документа, чтобы из этого интерфейса можно было построить виджет?
Т.е. какой IID подставлять вместо XXXXXXX?
Попутно. Кто-нибудь из коллег делал класс виджета для вордовского документа? Я-то свой написал, но меня не покидает ощущение, что кто-то мог это реализовать гораздо изящнее.
Попутно 2. На тролльтеховском форуме кто-то говорил, что вордовский документ вообще не следует пытаться делать ActiveX-controlом, с вордо якобы можно работать только как с COM-объектом :-(
С другой стороны, следующий код у меня работает:
QAxWidget *docAsWidget = new QAxWidget( "Word.Document" );
docAsWidget->show();
