GUIを構築するために使用されたwxWidgetsが基本的にwxWindow
から継承しているドキュメント(example)のさまざまなwxWidgetsクラスリファレンスから集めました。 the source of wxWidgets/window.cppのコメントから、各wxWindow
には、wxWidgetオブジェクトのm_widget
メンバーに格納されているGtkWidgetへのポインタがあることがわかります。同じソースコードのコメントから、wxWindow
クラスのメンバーであり、wxWindow
の場合には、描画および子のクライアント領域を持つwxPizza
オブジェクトへのポインタを保持できることもわかります。wxWidgets、GTK2ウィジェット、およびX11ウィンドウを接続するにはどうすればいいですか?
私はこの種の機能が必要なアプリケーションを開発中です。私はdrawable X11ウィンドウを含む必要がある私自身のウィジェットを作成するためにwxWidgetsクラスを拡張しています。それをすべて接続する方法が本当にわからないし、ドキュメントを使って解決策を見つけるのが難しいです。
私は(Create
方法で)私のカスタムウィジェットを作成しています、私はm_widget
とm_wxwindow
はこのことからして、両方のNULL
をしていると私は上記のものを、私はこれらは私が作成しなければならないGtkWidget
オブジェクトで集めることがわかります私のクライアントエリアを形成する。まず、私はこれを試しました:
m_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);
どのような作品が、私はそれが欲しいものではありません。私はGtkWidget
からXID
を取得することができ、X11ウィンドウは期待通りに動作します。しかし、これは私の主要なwxWidgetsアプリウィンドウの外に新しいウィンドウを作成します。私が望むのは、私の主要なwxWidgetsアプリウィンドウの中に埋め込まれていることを除いて、この正確な機能です。マイカスタムクラスは、このようwxBoxSizer
に追加されました:サイザーはwxBoxSizer
あるとmy_widget
は私のカスタムウィジェットです
sizer->Add(my_widget, 1, wxEXPAND | wxALL, 0);
ところ。
私はその後GtkWidget
のいくつかの異なる種類としてm_widget
を作成しようとしたが、gtk_widget_realize
を使用しようとXID
を取得しようとしたとき、これらはすべて、実行時エラーが生じました。
// These don't work
m_widget = gtk_drawing_area_new();
m_widget = gtk_vbox_new(false, 0);
これらは、私は上記をしようとしたとき、私は取得していますエラーメッセージです:
Gtk: IA__gtk_widget_realize: assertion 'GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
Gdk: gdkdrawable-x11.c:952 drawable is not a pixmap or window
Check failed: xwindow.
だから私、これはマルチパートの質問です:
- 適切である何
GtkWidget
これを達成するために入力しますか?私は描画可能なX11ウィンドウID(XID
)を取得し、それを親ウィジェット(wxBoxSizer
)に埋め込む必要があります。 m_widget
とm_wxwindow
の両方を使用する必要がありますか?これらをどのように設定するのですか?- これを
wxBoxSizer
に接続するには、sizer->Add()
に電話する以外は何もする必要がありますか?
ありがとう!
更新日:申し訳ありませんが、これはGTK2用です。これを指摘してくれてありがとう@andlabs。
更新2: @VZ。私が何をしようとしているのかを明確にすることを勧めました。
私はX11ウィンドウにアクセスする必要があるライブラリを使用していますが、そのウィンドウ自体は作成しません。ライブラリを初期化するときに、X11ウィンドウハンドル(XID
)を渡す必要があります。ライブラリがそのウィンドウに描画されます。このウィンドウを作成してwxWidgetsアプリケーションの中に入れたいと思います。私は、アプリケーションでwxSizer
に基づいてウィジェットにこれらのX11ウィンドウを追加できるように、wxWidgetsクラスを拡張しようとしています。
gtk_window_new()
は、新しいトップレベルウィンドウを作成するため、私のwxWidgetsアプリケーションに埋め込まれたウィンドウが必要なので、私が探しているものではありません。それはちょうど私が途中で試したものです。
GTK + 2またはGTK + 3? – andlabs
@David、なぜあなたは気にしますか?このm_widgetとm_wxwindowはすべて、内部的にwxWidgetsだけです。 wxWidgetsの描画サンプルを試しましたか?それとも他のサンプルでも問題ありませんか? – Igor
@andlabsにおねがいします、それはGTK + 2です – David