告别年代

阳光里闪耀的色彩真美丽

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  285 随笔 :: 6 文章 :: 32 评论 :: 53万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

请先看上一篇《wxWidgets入门》。

 

修改MyFrame.h:

复制代码
#ifndef MYFRAME_H
#define MYFRAME_H

#include <wx/wxprec.h>

#ifndef WX_PRECOMP    
#include <wx/wx.h>
#endif // WX_PRECOMP

class MyFrame : public wxFrame
{
public:
    MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:
    wxToolBar *toolBar;          // 给MyFrame增加一个ToolBar
    wxButton *button;            // 这个button将放置在MyFrame上
};

#endif // MYFRAME_H
复制代码

修改MyFrame.cpp:

复制代码
#include "MyFrame.h"
#include "ToolId.h"

MyFrame :: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
              : wxFrame(NULL, wxID_ANY, title, pos, size)
{
    // 新建工具条,作为MyFrame的子窗口
    toolBar = new wxToolBar(this, wxID_ANY);
    // 新建button,作为toolbar的子窗口
    button = new wxButton(toolBar, ID_BUTTON, wxT("Click me"));
    // 告知ToolBar它有了一个新Control
    toolBar->AddControl(button);
    // 让MyFrame使用该ToolBar
    SetToolBar(toolBar);
}
复制代码

进一步的说明:

1) 除了让control成为ToolBar的子窗口,我们还要让ToolBar管理这些control的布局等,所以我们需要toolBar->AddControl(button)这句话;

2) SetToolBar(toolBar)函数(包括CreateStatusBar)可以让MyFrame自动调整GetClientSize()的返回值(但不调整绘图时的坐标原点)。

    我们也可以使用CreateToolBar()这个wxFrame的成员函数。

3) 如果你需要多个ToolBar,就没办法用SetToolBar函数,所以你要自己管理Client的大小。一个办法是用GetSize函数计算出工具条占用空间,然后用一个wxWindow(或其他符合要求的widgets)作为MyFrame的子窗口占满Client剩余空间,所有的绘图操作在这个子窗口上做。事实上即使是仅有一个ToolBar也推荐这种方法;因为这样在绘图时可以不用考虑ToolBar所占据的坐标空间。

4) 也许我们还有其他更完善的方法管理多个ToolBar?

posted on   告别年代  阅读(2296)  评论(2编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示