여러 컨트롤의 배경을 다른 색상으로 채워야합니다. 여기 내 시도 :어떻게 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 및 웹에서 sizer에 대한 다른 자습서를 확인하십시오. – Igor
@Igor 내가 문제를 잘못 설명했다고 생각합니다. 요소에 설정된 위치가 wxboxsizer라는 것을 알고 있지만 각 크기 조절기마다 빈 색상으로 채워야합니다. 내 MCVE에서는 단추를 누를 때 sizer로 정의 된 색상의 아래쪽과 위쪽 절반을 변경하기 만하면됩니다. – CamFerry