Как объединить приложения с графическим интерфейсом в Windows - PullRequest
2 голосов
/ 23 ноября 2008

У меня есть приложение с графическим интерфейсом Windows, которое использует инфраструктуру Qt (в настоящее время версия 3.3.5 может измениться на Qt4).

Я хочу объединить другие приложения Windows GUI в основном приложении. Я не могу использовать виджеты непосредственно в основном приложении из-за нескольких ограничений, которые я не могу контролировать. Окончательный макет должен выглядеть следующим образом:

http://i.stack.imgur.com/RlK7T.png

В настоящее время я использую метод, описанный в Размещение приложений .exe в диалоговом окне . Чтобы передать HWND дочерних приложений, я использую свой собственный IPC между процессами. Затем мне нужно переслать события изменения размера, используя Qt resizeEvent, который вызывает ::MoveWindow в дочерних окнах.

Есть ли лучший или более общий механизм для этого? Некоторые предлагали мне использовать ActiveX, но я недостаточно знаком с этой технологией.

Ответы [ 2 ]

4 голосов
/ 24 ноября 2008

Вот как некоторые приложения Windows решают эту проблему:

Если приложение виджета должно находиться в своем собственном EXE-файле, то вы можете использовать вложение объекта документа OLE (я думаю, что это правильный термин). Это та же технология, которая используется для встраивания живого документа Excel в документ Word. По сути, WMF-подобные данные используются во всех процессах для визуализации пользовательского интерфейса. Это требует тонны работы в программах хоста и виджетов , если только фреймворки, над которыми вы работаете, поддерживают это автоматически. MFC отлично поработали с этим ... (мужик, я только что сделал комплимент MFC ??)

Лучшим решением было бы использование некоторого типа внутрипроцессного решения. Пусть все виджеты будут DLL. Вот как работает ActiveX. Если виджетам не хватало процесса, разделите рендеринг и внепроцессный процесс на 2 части. EXE-файл, выполняющий ненужные вещи и выполняющий рендеринг локально в процессах хостинга. Используйте какой-нибудь тип IPC, чтобы склеить их.

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

1 голос
/ 23 ноября 2008

HWND - самые основные строительные блоки Win32 GUI. Все, кроме этого, потребует сотрудничества размещенного приложения. например отправив родительский HWND в размещенное приложение.

...