これが私のコードです:
cLicensePanel::cLicensePanel( wxWindow * parent )
: wxPanel(parent,-1,wxPoint(0,0),wxSize(500,500))
{
wxBoxSizer * szrUserKey = new wxBoxSizer(wxHORIZONTAL);
myUserKeyCtrl = new wxTextCtrl(this,-1,L"");
szrUserKey->Add( new wxStaticText(this,-1,wxString(L"User's ComputerKey:")),
0,wxALL,10);
szrUserKey->Add( myUserKeyCtrl,0,wxALL,10);
szrUserKey->Add( new wxButton(this,IDC_Generate,L"Generate"),0,wxALL,10);
SetSizer( szrUserKey );
}
これは、3 つのウィジェットが一列にきれいに配置されたこの表示を生成することを目的としています。
ただし、実際に得られるのは、すべてのウィジェットが積み重ねられたものです
なんで?
Sizer::Layout() への明示的な呼び出しを追加することで、正しい表示を強制できます。
cLicensePanel::cLicensePanel( wxWindow * parent )
: wxPanel(parent,-1,wxPoint(0,0),wxSize(500,500))
{
wxBoxSizer * szrUserKey = new wxBoxSizer(wxHORIZONTAL);
myUserKeyCtrl = new wxTextCtrl(this,-1,L"");
szrUserKey->Add( new wxStaticText(this,-1,wxString(L"User's Computer Key:")),0,wxALL,10);
szrUserKey->Add( myUserKeyCtrl,0,wxALL,10);
szrUserKey->Add( new wxButton(this,IDC_Generate,L"Generate"),0,wxALL,10);
szrUserKey->Layout();
SetSizer( szrUserKey );
}
レイアウトを呼び出す必要はないように思えますが、これで問題ありません。また、Layout 呼び出しが必要な理由は、私が困惑している問題の重要な手がかりになるのではないかと思います。
上記はwxWidgets v2.8.12使用時の挙動です。v2.9.3 にアップグレードしています。
新しいバージョンでは、Layout() を呼び出さない最初のコードは、ウィジェットがすべて重なり合っているという同じ問題を示しています。v2.9.3 で layout() の呼び出しを追加すると、ウィジェットがまったく表示されなくなり、パネルが完全に空白になります。