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

StackOverflow https://stackoverflow.com/questions/312569

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top