zoukankan      html  css  js  c++  java
  • wxWidgets:给窗口添加工具条

    请先看上一篇《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?

  • 相关阅读:
    游戏文字自动断行需要,还得从 UTF-8 讲起
    史上最明白的 NULL、0、nullptr 区别分析(老师讲N篇都没讲明白的东东),今天终于明白了,如果和我一样以前不明白的可以好好的看看...
    django -- ORM实现作者增删改查
    selenium--操作JS弹框
    selenium--多窗口操作
    django -- ORM实现图书增删改查
    django -- ORM实现出版社增删改查
    selenium--等待的三种方式
    postman使用--Monitor
    django -- 实现ORM登录
  • 原文地址:https://www.cnblogs.com/byeyear/p/3485185.html
Copyright © 2011-2022 走看看