2017-05-01 7 views
-3

いくつかのコントロールの背景を色で塗りつぶす必要があります。 は、ここに私の試みです:wxBoxSizerの背景を埋めるには?

#include "wx/wx.h" 
#include <wx/dataview.h> 
#include <wx/spinctrl.h> 
#include <algorithm> 

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

wxIMPLEMENT_APP(MyApp); 

class MyFrame : public wxFrame 
    { 
    public: 
     MyFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title),flag(false) 
      { 
      wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL); 
      bSizer1 = new wxBoxSizer(wxVERTICAL); 
      bSizer2 = new wxBoxSizer(wxVERTICAL); 
      wxStaticText* label = new wxStaticText(this, wxID_ANY, wxT("Some text"), wxDefaultPosition, wxDefaultSize, 0); 
      wxButton* button = new wxButton(this, wxID_APPLY, wxT("Swap"), wxDefaultPosition, wxDefaultSize, 0); 
      button->Bind(wxEVT_BUTTON, [&](wxCommandEvent&) 
       { 
       this->Draw(); 
       }); 
      bSizer1->Add(label, 0, wxALIGN_CENTER|wxALL|wxSHAPED, 5); 
      topSizer->Add(bSizer1, 1, wxEXPAND, 5); 
      bSizer2->Add(button, 0, wxALIGN_CENTER|wxALL|wxSHAPED, 5); 
      topSizer->Add(bSizer2, 1, wxEXPAND, 5); 
      this->SetSizer(topSizer); 
      this->FitInside(); 
      this->Layout(); 
      Draw(); 
      } 
     void Draw() 
      { 
      wxColour col1(255, 255, 0), col2(0,0,255); 
      if(flag) 
       std::swap(col1,col2); 
      wxClientDC dc(this); 
      auto pos = bSizer1->GetPosition(); 
      auto size = bSizer1->ComputeFittingClientSize(this); 
      dc.SetBrush(wxBrush(col1)); 
      dc.DrawRectangle(pos, size); 
      pos = bSizer2->GetPosition(); 
      size = bSizer2->ComputeFittingClientSize(this); 
      dc.SetBrush(wxBrush(col2)); 
      dc.DrawRectangle(pos, size); 
      flag = !flag; 
      } 
    protected: 
     wxBoxSizer *bSizer1,*bSizer2; 
     bool flag; 
    }; 

bool MyApp::OnInit() 
    { 
    if (!wxApp::OnInit()) 
     return false; 

    MyFrame *frame = new MyFrame("MCVE"); 
    frame->Show(true); 
    return true; 
    } 

しかし、それは私がしたいことがありません。私はwxBoxSizerでそのようなメソッドが存在しないことを知っているので、何か間違っている。他の方法でコントロール要素をグループ化する方が良いでしょうか?

+0

あなたは達成したいことのモックアップを持っていますか?とにかくwxBoxSizerとウェブ上のサイザーに関するさまざまなチュートリアルをチェックしてください。 – Igor

+0

@Igorは私がひどく問題を説明したと思います。要素の設定位置がwxboxsizerであることはわかっていますが、各サイザーの色の異なる空の部分を埋める必要があります。私のMCVEでは、ボタンを押すとサイザーで定義された色の下半分と上半分を変更したいだけです。 – CamFerry

答えて

3

サイザーは抽象であり、画面には存在しないため、塗りつぶすことはできません。しかし、ウィンドウの背景を埋めることができます。特別なことをする必要はありません。ちょうどSetBackgroundColour()と呼んでください。

wxPanelを作成し、背景色を任意に設定してから、このパネルの子として必要なウィンドウを作成し、パネルで設定するサイザーを使用して管理しますフレームそのもの。

+0

申し訳ありませんが、わかりました。だから私は中間層としてwxpanelを追加する必要がありますか? – CamFerry

+0

私はこの素晴らしい[チュートリアル](http://zetcode.com/gui/wxwidgets/firstprograms/)が良い例であることを知ったので、今私は正しい方法を理解しています。 – CamFerry

関連する問題