いくつかのコントロールの背景を色で塗りつぶす必要があります。 は、ここに私の試みです: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でそのようなメソッドが存在しないことを知っているので、何か間違っている。他の方法でコントロール要素をグループ化する方が良いでしょうか?
あなたは達成したいことのモックアップを持っていますか?とにかくwxBoxSizerとウェブ上のサイザーに関するさまざまなチュートリアルをチェックしてください。 – Igor
@Igorは私がひどく問題を説明したと思います。要素の設定位置がwxboxsizerであることはわかっていますが、各サイザーの色の異なる空の部分を埋める必要があります。私のMCVEでは、ボタンを押すとサイザーで定義された色の下半分と上半分を変更したいだけです。 – CamFerry