IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 十四、wxWidgets布局之wxBoxSizer -> 正文阅读

[C++知识库]十四、wxWidgets布局之wxBoxSizer

? ? ? ? ?wxBoxSizer可以垂直或水平布置其子项,具体取决于其构造函数中使用的标志,wxVERTICAL和wxHORIZONTAL。

使用垂直 sizer 时,每个子项都可以居中、向右对齐或向左对齐。

使用水平 sizer 时,每个子项都可以居中、底部对齐或顶部对齐。

? ? ? ? 添加子项时,可以设置最小尺寸、边框、对齐、拉伸因子。

? ? ? ? 边框与wxLEFT、wxRIGHT、wxBOTTOM、wxTOP、wxALL配合使用。

? ? ? ? wxBoxSizer添加wxBoxSizer参数如下:

Add?? ?(?? ?wxSizer * ?? ?sizer,//
int ?? ?proportion = 0,//根据wxHORIZONTAL或wxVERTICAL决定该方向是否可拉伸。
int ?? ?flag = 0,//标志组合列表,参见附录一
int ?? ?border = 0,//边框宽度
wxObject * ??userData = NULL //允许将额外的对象附加到 sizer 项,以便在大小信息比比例和标志允许的更复杂时在派生类中使用。
)?? ?

一、边框

class LayoutSimple:public wxFrame
{
public:
? ? LayoutSimple(const wxString& title);
};

LayoutSimple::LayoutSimple(const wxString& title)
? ? :wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(680,280))
{

? ? wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);

? ? wxPanel *midPanel = new wxPanel(this,wxID_ANY);
? ? midPanel->SetBackgroundColour(
? ? //midPanel->SetBackgroundColour(wxColour("#ededed"));
? ? midPanel->SetBackgroundColour(*wxRED);//*wxRED为wxWidgets定义过的颜色

? ? vbox->Add(midPanel
? ? ? ? ? ? ? ,1 ? ? ? ?//垂直可拉伸,因为vbox = new wxBoxSizer(wxVERTICAL)是竖向。
? ? ? ? ? ? ? ,wxEXPAND|//水平可拉伸
? ? ? ? ? ? ? wxALL ? ?//wxAll:四周设置边框 wxLEFT wxRIGHT wxTOP wxBOTTOM左右上下设置边框
? ? ? ? ? ? ? ,20 ? ? ? //设置边框宽度
? ? ? ? ? ? ? );
? ? this->SetSizer(vbox);

? ? this->Centre();
}
?

二、多个wxBoxSizer组合

class LayoutBoxsizer:public wxFrame
{
public:
? ? LayoutBoxsizer(const wxString& title);
};


LayoutBoxsizer::LayoutBoxsizer(const wxString& title)
? ? :wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(680,280))
{

? ? wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);
? ? wxBoxSizer *hbox1= new wxBoxSizer(wxHORIZONTAL);
? ? wxBoxSizer *hbox2 = new wxBoxSizer(wxHORIZONTAL);

? ? wxButton *btnOk = new wxButton;
? ? btnOk->Create(this,wxID_ANY,"OK");
? ? btnOk->SetTransparent(1);

? ? wxButton *btnCancel = new wxButton;
? ? btnCancel->Create(this,wxID_ANY,"Cancel");

? ? wxPanel *panelHbox = new wxPanel(this,wxID_ANY);
? ? panelHbox->SetBackgroundColour(*wxLIGHT_GREY);
? ? hbox1->Add(panelHbox,1,wxEXPAND|wxALL,20);

? ? hbox2->Add(btnOk,0,wxRIGHT,1);//btnOK按钮右边设置边距
? ? hbox2->Add(btnCancel);

? ? vbox->Add(hbox1,1,wxEXPAND);
? ? vbox->Add(hbox2,0,wxALIGN_RIGHT|wxRIGHT|wxBOTTOM,20);

? ? this->SetSizer(vbox);

? ? this->Centre();
}
?

三、复杂一点的例子

?

class LayoutBoxsizer:public wxFrame
{
public:
? ? LayoutBoxsizer(const wxString& title);

protected:
? ? void OnQuit(wxCommandEvent& event);
? ??
};

LayoutBoxsizer::LayoutBoxsizer(const wxString& title)
? ? :wxFrame(NULL,wxID_ANY,title,wxDefaultPosition,wxSize(680,280))
{
? ? wxPanel *panel = new wxPanel(this,wxID_ANY);

? ? wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL);

? ? wxStaticText *st = new wxStaticText(panel,wxID_ANY,"Class Name");
? ? wxTextCtrl *text = new wxTextCtrl(panel,wxID_ANY);

? ? wxBoxSizer *boxClassName = new wxBoxSizer(wxHORIZONTAL);
? ? boxClassName->Add(st,0,wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL);
? ? boxClassName->Add(text,1);
? ? vbox->Add(boxClassName,0,wxEXPAND|wxLEFT|wxRIGHT|wxTOP,10);
? ? vbox->Add(wxID_ANY,10);//空白框

? ? wxStaticText *stMatch = new wxStaticText(panel,wxID_ANY,"Matching Classes");
? ? wxBoxSizer *boxMatch = new wxBoxSizer(wxHORIZONTAL);
? ? boxMatch->Add(stMatch);
? ? vbox->Add(boxMatch,0,wxLEFT|wxTOP,10);

? ? wxTextCtrl *textMatch = new wxTextCtrl(panel,wxID_ANY,"",
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? wxPoint(-1,-1),wxSize(-1,-1),wxTE_MULTILINE);
? ? wxBoxSizer *boxText = new wxBoxSizer(wxHORIZONTAL);
? ? boxText->Add(textMatch,1,wxEXPAND);
? ? vbox->Add(boxText,1,wxLEFT|wxRIGHT|wxEXPAND,10);
? ? vbox->Add(wxID_ANY,25);//空白框

? ? wxCheckBox *cb1 = new wxCheckBox(panel,wxID_ANY,"Case Sensitive");
? ? wxCheckBox *cb2 = new wxCheckBox(panel,wxID_ANY,"Nested Classes");
? ? wxCheckBox *cb3 = new wxCheckBox(panel,wxID_ANY,"Non_Project Classes");
? ? wxBoxSizer *boxCK = new wxBoxSizer(wxHORIZONTAL);
? ? boxCK->Add(cb1,1);
? ? boxCK->Add(cb2,1);
? ? boxCK->Add(cb3,1);
? ? vbox->Add(boxCK,0,wxLEFT,10);
? ? vbox->Add(wxID_ANY,25);//空白框

? ? wxButton *btnOK=new wxButton(panel,wxID_ANY,"OK");
? ? wxButton *btnClose = new wxButton(panel,wxID_ANY,"Close");
? ? wxBoxSizer *boxBtn = new wxBoxSizer(wxHORIZONTAL);
? ? boxBtn->Add(btnOK,0);
? ? boxBtn->Add(btnClose,0,wxLEFT|wxBOTTOM,10);
? ? vbox->Add(boxBtn,0,wxRIGHT|wxALIGN_RIGHT,10);

? ? panel->SetSizer(vbox);


? ? Bind(wxEVT_COMMAND_BUTTON_CLICKED,LayoutBoxsizer::OnQuit,this,btnClose->GetId());

? ? Center();
}

void LayoutBoxsizer::OnQuit(wxCommandEvent& event)
{
? ? Close(true);
}
?

附录一、标志列表flag

wxTOP
wxBOTTOM
wxLEFT
wxRIGHT
wxALL
这些标志用于指定边框宽度将应用于 sizer 项目的哪一侧。
wxEXPAND该项目将被扩展以填充分配给该项目的空间。
wxSHAPED该项目将尽可能扩大,同时保持其纵横比。
wxFIXED_MINSIZE通常 wxSizers 将使用 GetAdjustedBestSize() 来确定窗口项的最小尺寸应该是多少,并将使用该尺寸来计算布局。这允许布局在项目发生变化并且其最佳尺寸变得不同时进行调整。如果您希望窗口项保持其开始时的大小,则使用wxFIXED_MINSIZE.
wxRESERVE_SPACE_EVEN_IF_HIDDEN通常 wxSizer 不会为隐藏的窗口或其他项目分配空间。此标志会覆盖此行为,以便为窗口分配足够的空间,即使它不可见。例如,这使得在不调整父对话框大小的情况下动态显示和隐藏控件成为可能。(自 2.8.8 起可用。)
wxALIGN_CENTER
wxALIGN_CENTRE
wxALIGN_LEFT
wxALIGN_RIGHT
wxALIGN_TOP
wxALIGN_BOTTOM
wxALIGN_CENTER_VERTICAL
wxALIGN_CENTRE_VERTICAL
wxALIGN_CENTER_HORIZONTAL
wxALIGNRIZCENTAL
这些wxALIGN_*标志允许您在 sizer 分配给它
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 22:56:44  更:2021-07-14 22:57:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/27 3:37:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码