wxWrapSizer是将部件在某个方向(由wxHORIZONTAL或wxVERTICAL决定)一直排列,如果空间不足,就另起一行或是一列。
一、示例:
class LayoutWrapSizer:public wxFrame
{
public:
LayoutWrapSizer(const wxString& title);
};
LayoutWrapSizer::LayoutWrapSizer(const wxString& title)
:wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(280,180))
{
wxWrapSizer *sizer = new wxWrapSizer(wxHORIZONTAL);
wxString text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
wxString result;
wxButton *btn;
int r,g,b;
srand((unsigned)time(NULL));//随机数初始化
for(size_t i = 0;i != text.Len();i++)
{
result = text.Mid(i,1);
btn = new wxButton(this,wxID_ANY,result);
r = rand() %128 + 127;
g = rand() %128 + 127;
b = rand() %128 + 127;
btn->SetBackgroundColour(wxColour(r,g,b));
sizer->Add(btn,0,wxALL,5);
}
SetSizer(sizer);
Centre();
}
二、按钮点击事件
2.1 方法一
wxButton *btn[text.Len()];
for(size_t i = 0;i != text.Len();i++)
{
result = text.Mid(i,1);
btn[i] = new wxButton(this,wxID_ANY,result);
r = rand() %128 + 127;
g = rand() %128 + 127;
b = rand() %128 + 127;
btn[i]->SetBackgroundColour(wxColour(r,g,b));
btn[i]->Bind(wxEVT_COMMAND_BUTTON_CLICKED,LayoutWrapSizer::OnButtonClicked,this);
sizer->Add(btn[i],0,wxALL,5);
}
2.2方法二
for(size_t i = 0;i != text.Len();i++)
{
result = text.Mid(i,1);
wxButton *btn = new wxButton(this,wxID_ANY,result);
r = rand() %128 + 127;
g = rand() %128 + 127;
b = rand() %128 + 127;
btn->SetBackgroundColour(wxColour(r,g,b));
btn->Bind(wxEVT_COMMAND_BUTTON_CLICKED,LayoutWrapSizer::OnButtonClicked,this);
sizer->Add(btn,0,wxALL,5);
}