2

小さなアプリケーションの GUI を生成するために wxGlade デザイナーを使用しています。メイン アプリケーション ウィンドウである wxFrame から継承されたクラスを生成します。メンテナンスを容易にするために、この生成されたクラスに追加のコードを書くことは避けたいと思います。

しかし、wxGlade で作成されたすべてのウィジェットは、実際には自動生成メソッド do_layout() で作成されており、生成されたクラスで生成されたメソッドのスコープ外にあるウィジェットにアクセスすることはできません。

生成されたクラスの外で特定のウィジェットのポインターを取得する方法はありますか?名前、型、子を列挙するなどによって?

4

3 に答える 3

3

wxWindow から継承されたすべてのクラス (wxFrame はその 1 つです) には関数 " GetChildren " があります。この関数は、列挙できる子ウィンドウのリストを返します。名前で特定のフィールドを探している場合は、「FindWindow」関数を使用します。

于 2008-10-08T13:39:35.440 に答える
1

実際、私は自分で答えを見つけました:

wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
     wxWindow *current = (wxWindow *)node->GetData();

     // .. do something with current
}
于 2008-10-08T13:42:02.893 に答える
-1

wxFormBuilderを試すことをお勧めします。以前も wxGlade を使用していましたが、使用方法に制約が多すぎます。たとえば、wxFormBuilder を使用すると、フォーム上の各コントロールの「可視性」(公開、保護、非公開) を選択できます。また、イベント ハンドラー用の仮想関数を生成することもできるため、wxFormBuilder で生成されたクラスからクラスを派生させ、それらの関数を実装するだけです。

于 2008-10-22T05:41:49.363 に答える