zoukankan      html  css  js  c++  java
  • [ZETCODE]wxWidgets教程四:菜单栏和工具栏

    本教程原文链接:http://zetcode.com/gui/wxwidgets/menustoolbars/

    翻译:瓶哥

    日期:2013年11月28日星期四

    邮箱:414236069@qq.com

    主页:http://www.cnblogs.com/pingge/

    若有翻译错误或者歧义请联系我!

    一个菜单条是一个应用程序最主要的可见部分之一,它是一组在菜单上的各种各样的命令。在控制台程序里你不得不记住这些神秘的命令,在菜单栏里我们把大部分的命令包装到菜单里。这是进一步减少学习一个新的程序所花费的时间的标准工具。要在wxWidgets里使用菜单栏,我们要有三样东西:wxMenuBar, wxMenu, wxMenuItem。

    一个使用菜单栏的简单例子

    menu.h

    #include <wx/wx.h>
    
    #include <wx/menu.h>
    
     
    
    class SimpleMenu : public wxFrame
    
    {
    
    public:
    
    SimpleMenu(const wxString & title);
    
     
    
    void OnQuit(wxCommandEvent & event);
    
     
    
    wxMenuBar * menubar;
    
    wxMenu * file;
    
    };
    View Code

    menu.cpp

    #include "menu.h"
    
     
    
    SimpleMenu::SimpleMenu(const wxString & title)
    
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))
    
    {
    
    menubar = new wxMenuBar;
    
     
    
    file = new wxMenu;
    
    file->Append(wxID_EXIT, _T("&Quit	Ctrl-Q"), _T("Quit the program"));
    
     
    
    menubar->Append(file, _T("&File"));
    
    SetMenuBar(menubar);
    
     
    
    Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(SimpleMenu::OnQuit));
    
     
    
    Centre();
    
    }
    
     
    
    void SimpleMenu::OnQuit(wxCommandEvent & event)
    
    {
    
    Close(true);
    
    }
    View Code

    main.h

    #include <wx/wx.h>
    
     
    
    class MyApp : public wxApp
    
    {
    
    public:
    
    virtual bool OnInit();
    
    };
    View Code

    main.cpp

    #include "main.h"
    
    #include "menu.h"
    
     
    
    IMPLEMENT_APP(MyApp)
    
     
    
    bool MyApp::OnInit()
    
    {
    
    SimpleMenu * menu = new SimpleMenu(_T("Simple Menu"));
    
     
    
    menu->Show(true);
    
     
    
    return true;
    
    }
    View Code

    menubar = new wxMenuBar;

    首先我们创建了一个菜单栏对象。

    file = new wxMenu

    然后我们创建一个菜单对象。

    File->Append(wxID_EXIT, _T("&Quit Ctrl-Q"));

    我们把一个菜单选项添加进菜单对象。第一个参数是是菜单选项的ID,第二个参数选项的名称,第三个选项是提示字符串。在这里,我们没有明确地建立一个wxMenuItem对象,它是被Append()方法隐式创建的,接下来的例子我们将演示如何手动创建wxMenuItem对象。

    Menubar->Append(file, _T("&File"));

    SetMenuBar(menubar);

    最后,我们把这个菜单添加进菜单栏,字符&建立了一种以快捷键来操作的方式,这个程序你可以使用Ctrl+Q来关闭程序。最后我们调用了SetMenuBar()方法,这个方法属于wxFrame组件,它设置了菜单栏。

    子菜单

    每一个菜单都可以有一个子菜单,这样我们可以把相似的命令放到一个子菜单中。例如,我们可以显示或隐藏各种工具栏(地址栏、状态栏、导航栏)的选项添加到子菜单中。在一个菜单中我们可以使用分隔符把命令分开,分隔符是一条简单的线段。把像新建、打开、保存之类的命令和打印、打印预览之类的命令用一个简单分隔符分开是很容易做到的。在我们的例子中,我们会看到如何创建一个子菜单和一个菜单分隔符。

    menu.h

    #include <wx/wx.h>
    
    #include <wx/menu.h>
    
     
    
    class SubMenu : public wxFrame
    
    {
    
    public:
    
    SubMenu(const wxString & title);
    
     
    
    void OnQuit(wxCommandEvent & event);
    
     
    
    wxMenuBar * menubar;
    
    wxMenu * file;
    
    wxMenu * imp;
    
    wxMenuItem * quit;
    
    };
    View Code

    menu.cpp

    #include "menu.h"
    
     
    
    SubMenu::SubMenu(const wxString & title)
    
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))
    
    {
    
    menubar = new wxMenuBar;
    
     
    
    file = new wxMenu;
    
    file->Append(wxID_ANY, wxT("&New"));
    
    file->Append(wxID_ANY, wxT("&Open"));
    
    file->Append(wxID_ANY, wxT("&Save"));
    
    file->AppendSeparator();
    
     
    
    imp = new wxMenu;
    
    imp->Append(wxID_ANY, wxT("Import newsfeed list..."));
    
    imp->Append(wxID_ANY, wxT("Import bookmarks..."));
    
    imp->Append(wxID_ANY, wxT("Import mail..."));
    
     
    
    file->AppendSubMenu(imp, _T("I&mport"));
    
     
    
    quit = new wxMenuItem(file, wxID_EXIT, _T("&Quit	Ctrl+Q"));
    
    file->Append(quit);
    
     
    
    menubar->Append(file, _T("&File"));
    
    SetMenuBar(menubar);
    
     
    
    Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(SubMenu::OnQuit));
    
     
    
    Centre();
    
    }
    
     
    
    void SubMenu::OnQuit(wxCommandEvent & event)
    
    {
    
    Close(true);
    
    }
    View Code

    main.h

    #include <wx/wx.h>
    
     
    
    class MyApp : public wxApp
    
    {
    
    public:
    
    virtual bool OnInit();
    
    };
    View Code

    main.cpp

    #include "main.h"
    
    #include "menu.h"
    
     
    
    IMPLEMENT_APP(MyApp)
    
     
    
    bool MyApp::OnInit()
    
    {
    
    SubMenu * menu = new SubMenu(_T("SubMenu"));
    
     
    
    menu->Show(true);
    
     
    
    return true;
    
    }
    View Code

    我们在文件菜单中创建了一个子菜单,这是一个导入子菜单。

    File->AppendSeparator();

    使用AppendSeparator()方法创建了一个菜单分隔符。

    Imp = new wxMenu;

    imp->Append(wxID_ANY, wxT("Import newsfeed list..."));

    imp->Append(wxID_ANY, wxT("Import bookmarks..."));

    imp->Append(wxID_ANY, wxT("Import mail..."));

    file->AppendSubMenu(imp, _T("I&mport"));

    一个子菜单像普通的菜单一样被创建,它被AppendSubMenu()添加进菜单。

    工具栏

    菜单把所有程序的命令组合在一起,而工具栏提供一种快速操作最频繁使用的命令的方法。

    Virtual wxToolBar * CreateToolBar(long style = wxNO_BORDER | wxTB_HORIZONTAL, wxWindowID id = -1, const wxString & name = "toolBar");

    要创建一个工具栏,我们可以在frame组件内调用CreateToolBar()方法。

    一个简单的工具栏

    我们第一个例子会创建一个简单的工具栏。

    toolbar.h

    #include <wx/wx.h>
    
     
    
    class Toolbar : public wxFrame
    
    {
    
    public:
    
    Toolbar(const wxString & title);
    
    void OnQuit(wxCommandEvent & event);
    
    };
    View Code

    toolbar.cpp

    #include "toolbar.h"
    
     
    
    Toolbar::Toolbar(const wxString & title)
    
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))
    
    {
    
    wxImage::AddHandler(new wxPNGHandler);
    
     
    
    wxBitmap exit(_T("exit.png"), wxBITMAP_TYPE_PNG);
    
     
    
    wxToolBar * toolbar = CreateToolBar();
    
    toolbar->AddTool(wxID_EXIT, exit, _T("Exit application"));
    
    toolbar->Realize();
    
     
    
    Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(Toolbar::OnQuit));
    
     
    
    Centre();
    
    }
    
     
    
    void Toolbar::OnQuit(wxCommandEvent & WXUNUSED(event))
    
    {
    
    Close(true);
    
    }
    View Code

    main.h

    #include <wx/wx.h>
    
     
    
    class MyApp : public wxApp
    
    {
    
    public:
    
    virtual bool OnInit();
    
    };
    View Code

    main.cpp

    #include "main.h"
    
    #include "toolbar.h"
    
     
    
    IMPLEMENT_APP(MyApp)
    
     
    
    bool MyApp::OnInit()
    
    {
    
    Toolbar * toolbar = new Toolbar(_T("Toolbar"));
    
     
    
    toolbar->Show(true);
    
     
    
    return true;
    
    }
    View Code

    在我们的例子中,我们创建了一个工具栏和一个工具按钮,单击那个按钮会终止程序运行。

    wxToolBar * toolbar = CreateToolBar();

    我们创建了一个工具栏。

    Toolbar->AddTool(wxID_EXIT, exit, _T("Exit application"));

    我们把一个工具添加到工具栏。

    Toolbar->Realize();

    在我们添加完工具后,我们调用Realize()方法实现这个工具栏。

    工具栏

    如果我们想要多个工具栏,我们必须用不同的方法去创建它们。

    toolbars.h

    #include <wx/wx.h>
    
     
    
    class Toolbar : public wxFrame
    
    {
    
    public:
    
    Toolbar(const wxString & title);
    
    void OnQuit(wxCommandEvent & event);
    
     
    
    wxToolBar * toolbar1;
    
    wxToolBar * toolbar2;
    
    };
    View Code

    toolbars.cpp

    #include "toolbars.h"
    
     
    
    Toolbar::Toolbar(const wxString & title)
    
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(280, 180))
    
    {
    
    wxImage::AddHandler(new wxPNGHandler);
    
     
    
    wxBitmap exit(_T("exit.png"), wxBITMAP_TYPE_PNG);
    
    wxBitmap newb(_T("new.bmp"), wxBITMAP_TYPE_BMP);
    
    wxBitmap open(_T("open.bmp"), wxBITMAP_TYPE_BMP);
    
    wxBitmap save(_T("save.bmp"), wxBITMAP_TYPE_BMP);
    
     
    
    wxBoxSizer * vbox = new wxBoxSizer(wxVERTICAL);
    
     
    
    toolbar1 = new wxToolBar(this, wxID_ANY);
    
    toolbar1->AddTool(wxID_ANY, newb, _T(""));
    
    toolbar1->AddTool(wxID_ANY, open, _T(""));
    
    toolbar1->AddTool(wxID_ANY, save, _T(""));
    
    toolbar1->Realize();
    
     
    
    toolbar2 = new wxToolBar(this, wxID_ANY);
    
    toolbar2->AddTool(wxID_EXIT, exit, _T("Exit application"));
    
    toolbar2->Realize();
    
     
    
    vbox->Add(toolbar1, 0, wxEXPAND);
    
    vbox->Add(toolbar2, 0, wxEXPAND);
    
     
    
    SetSizer(vbox);
    
     
    
    Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(Toolbar::OnQuit));
    
     
    
    Centre();
    
    }
    
     
    
    void Toolbar::OnQuit(wxCommandEvent & WXUNUSED(event))
    
    {
    
    Close(true);
    
    }
    View Code

    main.h

    #include <wx/wx.h>
    
     
    
    class MyApp : public wxApp
    
    {
    
    public:
    
    virtual bool OnInit();
    
    };
    View Code

    main.cpp

    #include "main.h"
    
    #include "toolbars.h"
    
     
    
    IMPLEMENT_APP(MyApp)
    
     
    
    bool MyApp::OnInit()
    
    {
    
    Toolbar * toolbar = new Toolbar(_T("Toolbar"));
    
     
    
    toolbar->Show(true);
    
     
    
    return true;
    
    }
    View Code

    在我们的例子中,我们创建了两个水平的工具栏,并且把它们放置到一个垂直的布局控件中。

    toolbar1 = new wxToolBar(this, wxID_ANY);

    ……

    toolbar2 = new wxToolBar(this, wxID_ANY);

    这里我们创建了两个工具栏。

    vbox->Add(toolbar1, 0, wxEXPAND);

    vbox->Add(toolbar2, 0, wxEXPAND);

    这里我们把他们添加进垂直的布局控件中。

    在这一章的wxWidgets教程中,我们介绍了菜单栏和工具栏。

  • 相关阅读:
    JavaScript的关键点
    博客开始
    CCF
    java-CCF+杂七杂八
    【软件工程】需求分析V2再整理
    汇编 书上实验
    组原2
    chrome主页被绑架
    【软件工程】乱的一遭
    【我希望我能鼓起勇气】汇编语言
  • 原文地址:https://www.cnblogs.com/pingge/p/3449217.html
Copyright © 2011-2022 走看看