2016-12-01 11 views
0

である私はwxWidgetsのと自分のスキルを練習し始めていると私は、このスライダー上記の二つの異なるテキストで、いくつかのパネルを追加したいが、私が試したとき、結果は目に見えないです:wxWidgetsのC++パネルが見えない

MainWindow::MainWindow(const wxString& title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition) { 
    wxMenuBar *menubar; 
    wxMenu *file; 
    menubar = new wxMenuBar; 
    file = new wxMenu; 
    file->Append(wxID_OPEN, wxT("&Open")); 
    menubar->Append(file, wxT("&File")); 
    SetMenuBar(menubar); 

    wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); 
    this->SetSizer(vbox); 
    player_widget = new wxWindow(this, wxID_ANY); 
    player_widget->SetBackgroundColour(wxColour(wxT("black"))); 
    vbox->Add(player_widget, 1, wxEXPAND | wxALIGN_TOP); 

    wxBoxSizer* bs = new wxBoxSizer(wxHORIZONTAL); 
    wxPanel* p1 = new wxPanel(this,wxID_ANY,wxDefaultPosition,wxSize(0,20)); 
    p1->SetSizer(bs); 
    p1->Enable(true); 
    p1->Show(true); 
    vbox->Add(p1,0,wxEXPAND); 

    wxStaticText* text1 = new wxStaticText(this,11, "text 1"); 
    wxStaticText* text2 = new wxStaticText(this,12, "text 2"); 
    bs->Add(text1); 
    bs->Add(text2); 

    timeline = new wxSlider(this, myID_TIMELINE, 0, 0, TIMELINE_MAX); 
    vbox->Add(timeline, 0, wxEXPAND); 

    wxPanel *controlPanel = new wxPanel(this, wxID_ANY); 
    wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); 
    controlPanel->SetSizer(hbox); 
    vbox->Add(controlPanel, 0, wxEXPAND); 
    playpause_button = new wxButton(controlPanel, myID_PLAYPAUSE, wxT("Play")); 
    stop_button = new wxButton(controlPanel, myID_STOP, wxT("Stop")); 
    volume_slider = new wxSlider(controlPanel, myID_VOLUME, VOLUME_MAX, 0, VOLUME_MAX, wxDefaultPosition, wxSize(100, -1)); 
    hbox->Add(playpause_button); 
    hbox->Add(stop_button); 
    hbox->AddStretchSpacer(); 
    hbox->Add(volume_slider); 
} 

どれでも私が間違っていたアイデア

+1

wxFormBuilderの使用を検討して、コード。 – macroland

+0

またはwxGladeまたはwxCrafter – Igor

答えて

0

text1text2~p1の親を変更してください。

0

すべてを保持するパネルを1つだけ使用する方が簡単です。このような

サムシング(完全なプログラム)

#include <wx/wx.h> 
#include <wx/app.h> 

class cApp : public wxApp 
{ 
public: 
    virtual bool OnInit(); 

}; 

#define TIMELINE_MAX 100 
#define VOLUME_MAX 100 

enum { 
myID_TIMELINE, 
myID_PLAYPAUSE, 
myID_STOP, 
myID_VOLUME 
}; 

class cFrame: public wxFrame 
{ 

    wxWindow * player_widget; 
    wxSlider * timeline; 
    wxSlider * volume_slider; 
    wxButton * playpause_button; 
    wxButton * stop_button; 

public: 
    cFrame(wxFrame *frame, const wxString& title) 
     : wxFrame(frame, -1, title, wxPoint(-1,-1),wxSize(600,600)) 
     { 
    wxMenuBar *menubar; 
    wxMenu *file; 
    menubar = new wxMenuBar; 
    file = new wxMenu; 
    file->Append(wxID_OPEN, wxT("&Open")); 
    menubar->Append(file, wxT("&File")); 
    SetMenuBar(menubar); 

    // define one panel to hold everything 
    // make it big enough to fill the frame 
    wxPanel* p1 = new wxPanel(this,wxID_ANY, wxPoint(-1,-1),wxSize(600,600)); 

    // top level sizer to hold everything 
    wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); 

    // add window widget at top 
    player_widget = new wxWindow(p1, wxID_ANY); 
    player_widget->SetBackgroundColour(wxColour(wxT("black"))); 
    vbox->Add(player_widget, 1, wxEXPAND | wxALIGN_TOP); 

    // add some texts in a horizontal row 
    wxBoxSizer* bs = new wxBoxSizer(wxHORIZONTAL); 
    wxStaticText* text1 = new wxStaticText(p1,11, "text 1"); 
    wxStaticText* text2 = new wxStaticText(p1,12, "text 2"); 
    bs->Add(text1); 
    bs->Add(text2); 

    // add texts just below window widget 
    vbox->Add(bs); 

    // add slider below texts 
    timeline = new wxSlider(this, myID_TIMELINE, 0, 0, TIMELINE_MAX); 
    vbox->Add(timeline, 0, wxEXPAND); 

    // some more controls in a row 
    wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); 
    playpause_button = new wxButton(p1, myID_PLAYPAUSE, wxT("Play")); 
    stop_button = new wxButton(p1, myID_STOP, wxT("Stop")); 
    volume_slider = new wxSlider(p1, myID_VOLUME, VOLUME_MAX, 
      0, VOLUME_MAX, wxDefaultPosition, wxSize(100, -1)); 
    hbox->Add(playpause_button); 
    hbox->Add(stop_button); 
    hbox->AddStretchSpacer(); 
    hbox->Add(volume_slider); 

    // add controls below big slider 
    vbox->Add(hbox); 

    // make everything happen 
    SetSizer(vbox); 
     } 
}; 

IMPLEMENT_APP(cApp); 

bool cApp::OnInit() 
{ 
    cFrame* frame = new cFrame(0L, _("wx Starter")); 
    frame->Show(); 

    return true; 
} 

これが与える:ここでは

enter image description here

はコンピュータプログラミングに関することだ。いくつかの時点で、あなたは常に、落ち着くし、いくつかを記述する必要がコード。 wxFormBuilderのような、あなたのためのコードを書くことを約束しているアプリケーションは、ある時点で放棄されなければならず、実際には何らかの作業が必要です(Here is a link to more about this

+0

が正しいです。しかし、ちょうど今wxフレームワークに来て、それを学び理解したい人にとっては、ツールを使い、生成されたコードを見てから、最初からサイザーコードを書きます。同意しないでしょうか? – Igor

+1

申し訳ありませんが、私は同意しません。自動コードジェネレータによって生成されたコードを見ることは役に立ちません。自動コードは、教授用ではなく、コードジェネレータによって簡単に管理できるように設計されています。初心者コーダーは、人間によって書かれたサンプルコードを見て、人間によって学ばれるように設計されている方が良いです。 – ravenspoint

関連する問題