2016-12-02 12 views
1

別のアプリケーションウィンドウを自分のwxウィンドウの親にする方法を知りたい。別のアプリケーションのウィンドウのwxウィンドウの親を作る方法は?

twainモジュールがそういったことができるので可能です。

例えば、pygame.displayのハンドルを渡すと、表示されるスキャンダイアログの親として機能します。 あなたはTk()またはwx.Frame()のハンドルを直接与えることができます(ただし、とにかくハンドル番号だけを取り込みます)。

または、たとえばメモ帳など、全く異なるアプリケーションのハンドルを渡すことができます。

私はこれを達成したいと思います。そのため、私のwxダイアログやポップアップウィンドウは、別のアプリケーションでモーダルモードで表示されます。

あなたはすでに私がMS Windowsでそれをやりたいと推測しました。 さて、私はそれをクロスプラットフォームでやってみたいですが、他のプラットフォームは、他のアプリのインターフェースを誰かが混乱させるほど馬鹿ではありません。 確かにそれは可能だと思うが、はるかに難しい。だから、今のところWindowsだけです。

これは私がwx.WindowやFrame、Panelなどをエミュレートして、選択したウィンドウハンドルに基づいてダイアログに渡す必要があると思います。またはそのようなもの。

アイデア?

答えて

0

私はwxWidgets(C/C++ライブラリ)の用語で話しますので、例えば私の "wxFrame"はあなたのwx.Frameに変わります。

wxWindowクラスのメソッドはSetIdhttp://docs.wxwidgets.org/3.1/classwx_window.html)です。 wxWindowオブジェクト(デフォルトでは "ParrentWindow"と呼ぶ)を作成し、外部アプリケーションのウィンドウのIDを調べ、このウィンドウIDをSetIdの "ParrentWindow"オブジェクトのメソッドに渡すことができます。

次に、このオブジェクトを独自のウィンドウ(wxWindow、wxFrame、wxPannelなど)の親として使用するようにしてください。新しいウィンドウオブジェクトのコンストラクタに "ParrentWindow"を渡すだけです。

多分それはうまくいくでしょう。

しかし、(MS Windows OSの現代版では)あなたのアプリが自分のウィンドウでのみ動作するように制限することができます。そのような場合は、管理者アカウントの1つでアプリを実行する必要があります。

UPD:

私はちょうどMSDNに見て、はいてきた:あなたはすでにSetParent()のWin32 API関数を使用して(すでに構築された)ウィンドウを既存の親を変更することができます。https://msdn.microsoft.com/en-us/library/windows/desktop/ms633541(v=vs.85).aspx

ですから、ロードすることができUser32.dllをPythonコードに組み込み、このwin32 APIを直接(デフォルトの​​モジュールを使用して)または間接的に(pywin32モジュールによって)使用します。次に、あなたの子ウィンドウのHWNDと外部親ウィンドウのHWNDを取得するだけです。 win32 API関数SetParent()に渡してください。しかし、wxWindowsコードをバイパスしてwin32 APIを使用すると、適切なwxWindowsオブジェクトで矛盾が生じる可能性があります(またはそうでない可能性があります)。

+0

ここに2つの問題があります。私は親なしでwx.Window()を作成することは許されていません、wx.Frame()できます。しかし - 2.wx.Frameではありません。SetId()は、wxイベントマネージャのローカライズされたIDのみですか? wx.Frame.GetId()!= wx.Frame.GetHandle()を参照してください。 wx.Frame.SetHandle()もありません。 – Dalen

+0

ああ、ええ、私はwxWidgetsを見つけました。少なくとも新しいversioはwxNativeWindowクラスを持っています。これは私が必要とするものですが、wxPythonはまだありません。私は何とかそれをエミュレートする必要があります.n – Dalen

+0

私はいくつかの追加情報で答えを更新しました。 PS:wxWidgetsライブラリで作業していた前回、wxWidgetsソースを変更した前回は2012年になったと思っていましたので、現在、wxWidgetsについてより正確で役立つことは難しいです。 Sry。 – KromviellBlack

関連する問題