使用wxBoxSizer将wxStaticText放在wxWindow上

时间:2012-08-29 05:29:46

标签: c++ wxwidgets

我想将我的wxStaticText放在wxWindow上,但似乎这不起作用。这是我的代码:

#include <iostream> 
#include <wx/wx.h>
#include <wx/gbsizer.h>

using namespace std;

class MyApp: public wxApp
{
    virtual bool OnInit();
};

bool MyApp::OnInit()
{
 wxFrame *frame = new wxFrame(NULL,wxID_ANY,wxT("fenetre"));
 wxWindow *win = new wxWindow(frame,wxID_ANY);
 win->SetWindowStyle(wxBORDER_RAISED);
 wxStaticText *text = new wxStaticText(win,wxID_STATIC,wxT("Mon texte"));
 wxBoxSizer *b = new wxBoxSizer(wxVERTICAL);
 wxGridBagSizer *box = new wxGridBagSizer();
 wxButton *button = new wxButton(frame,wxID_ANY,wxT("salut"));
 b->Add(text,0,wxALIGN_CENTRE);
 win->SetSizer(b);
 box->Add(win,wxGBPosition(0,0),wxDefaultSpan,wxALL|wxALIGN_CENTER|wxGROW);
 box->Add(button,wxGBPosition(1,0),wxDefaultSpan,wxALL|wxGROW);
 box->AddGrowableCol(0);
 box->AddGrowableRow(0);
 box->AddGrowableRow(1);
 frame->SetSizer(box);
 frame->Show(true);
 return true; 
}

DECLARE_APP(MyApp)
IMPLEMENT_APP(MyApp)

我不知道出了什么问题,但是wxStaticText并没有将自己置于我的wxWindow上。请告诉我缺少什么。

我的代码直接在框架上使用wxStaticText。

#include <wx/gbsizer.h>

using namespace std;

class MyApp: public wxApp
 {
     virtual bool OnInit();
 };

 bool MyApp::OnInit()
 {
   wxFrame *frame = new wxFrame(NULL,wxID_ANY,wxT("fenetre"));
   //wxFrame *win = new wxFrame(frame,wxID_ANY,wxT("hh"));
   wxStaticText *text = new       wxStaticText(frame,wxID_STATIC,wxT("Mon texte"),wxDefaultPosition,wxDefaultSize,wxALIGN_CENTER_HORIZONTAL);
  text->SetWindowStyle(wxBORDER_RAISED);
  //wxBoxSizer *b = new wxBoxSizer(wxVERTICAL);
  wxGridBagSizer *box = new wxGridBagSizer();
  wxButton *button = new wxButton(frame,wxID_ANY,wxT("salut"));
  //b->Add(text,0,wxALIGN_CENTRE);
  //win->SetSizer(b);
  box->Add(text,wxGBPosition(0,0),wxDefaultSpan,wxALL|wxALIGN_CENTER);
  box->Add(button,wxGBPosition(1,0),wxDefaultSpan,wxALL|wxGROW);
  box->AddGrowableCol(0);
  box->AddGrowableRow(0);
  box->AddGrowableRow(1);
  frame->SetSizer(box);
  frame->Show(true);
  return true;
 }

 DECLARE_APP(MyApp)
 IMPLEMENT_APP(MyApp)

1 个答案:

答案 0 :(得分:0)

请勿将控件直接放在框架上,即作为框架的子框。

不要这样做:

wxStaticText *text = new       wxStaticText(frame,wxID_STATIC,wxT("Mon texte"),

最好将wxPanel创建为框架的单个子项,并将控件作为面板的子项。

请拜托,请查看示例应用程序并按照其中的操作方式进行操作。

如果您使用示例应用程序代码作为起点,那么您将节省大量时间,您自己和其他所有人的时间。