2

Qtフレームワークを使用しているWindowsGUIアプリケーションがあります(現在、バージョン3.3.5、Qt4に変更される可能性があります)。

メインアプリケーションで他のWindowsGUIアプリケーションを組み合わせたい。制御できないいくつかの制約があるため、メインアプリケーションでウィジェットを直接使用することはできません。最終的なレイアウトは次のようになります。

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

現在、ホスティング.exeアプリケーションで概説されている方法をダイアログに使用しています。HWND子アプリケーションを渡すために、プロセス間で独自のIPCを使用しています。次に、子ウィンドウresizeEventを呼び出すQtを使用してサイズ変更イベントを転送する必要があります。::MoveWindow

これを行うためのより良いまたはより一般的なメカニズムはありますか?ActiveXを使用することを提案する人もいましたが、このテクノロジについては十分に理解していません。

4

2 に答える 2

4

一部の Windows アプリケーションがこの問題に対処する方法を次に示します。

ウィジェット アプリケーションを独自の EXE に含める必要がある場合は、OLE ドキュメント オブジェクトの埋め込みを使用できます (正しい用語だと思います)。これは、ライブの Excel ドキュメントを Word ドキュメントに埋め込むために使用されるテクノロジと同じです。基本的に、UI をレンダリングするために、WMF のようなデータがプロセス間で使用されます。構築しているフレームワークがこれを自動的にサポートしない限り、ホスト プログラムとウィジェット プログラムの両方で大量の作業が必要になります。MFC はこれで素晴らしい仕事をしました... (男、私は MFC をほめたたえましたか??)

より良い解決策は、ある種のインプロセス ソリューションを使用することです。すべてのウィジェットを DLL にします。これが ActiveX の仕組みです。ウィジェットをプロセス外で実行する必要がある場合は、レンダリングとプロセス外のものを 2 つの部分に分割します。プロセス外のものを実行し、ホスティング プロセスでローカルにレンダリングを行う EXE。ある種の IPC を使用してそれらを接着します。

「制御できない制限」により、ほぼすべての「正常な」実装が不可能になると思います...

于 2008-11-24T16:47:01.520 に答える
1

HWND は、Win32 GUI の最も基本的な構成要素です。それを超えるものは、ホストされているアプリケーションの協力が必要です。たとえば、親 HWND をホストされたアプリに送信します。

于 2008-11-23T19:02:43.743 に答える