本教程原文链接: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;

};

menu.cpp

#include "menu.h"

SimpleMenu::SimpleMenu(const wxString & title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(, ))

{

menubar = new wxMenuBar;

file = new wxMenu;

file->Append(wxID_EXIT, _T("&Quit\tCtrl-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);

}

main.h

#include <wx/wx.h>

class MyApp : public wxApp

{

public:

virtual bool OnInit();

};

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;

}

menubar = new wxMenuBar;

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

file = new wxMenu

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

File->Append(wxID_EXIT, _T("&Quit\tCtrl-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;

};

menu.cpp

#include "menu.h"

SubMenu::SubMenu(const wxString & title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(, ))

{

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\tCtrl+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);

}

main.h

#include <wx/wx.h>

class MyApp : public wxApp

{

public:

virtual bool OnInit();

};

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;

}

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

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);

};

toolbar.cpp

#include "toolbar.h"

Toolbar::Toolbar(const wxString & title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(, ))

{

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);

}

main.h

#include <wx/wx.h>

class MyApp : public wxApp

{

public:

virtual bool OnInit();

};

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;

}

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

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;

};

toolbars.cpp

#include "toolbars.h"

Toolbar::Toolbar(const wxString & title)

: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(, ))

{

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, , wxEXPAND);

vbox->Add(toolbar2, , wxEXPAND);

SetSizer(vbox);

Connect(wxID_EXIT, wxEVT_COMMAND_TOOL_CLICKED, wxCommandEventHandler(Toolbar::OnQuit));

Centre();

}

void Toolbar::OnQuit(wxCommandEvent & WXUNUSED(event))

{

Close(true);

}

main.h

#include <wx/wx.h>

class MyApp : public wxApp

{

public:

virtual bool OnInit();

};

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;

}

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

toolbar1 = new wxToolBar(this, wxID_ANY);

……

toolbar2 = new wxToolBar(this, wxID_ANY);

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

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

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

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

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

[ZETCODE]wxWidgets教程四:菜单栏和工具栏的更多相关文章

  1. [ZETCODE]wxWidgets教程八:组件专题1

    本教程原文链接:http://zetcode.com/gui/wxwidgets/widgets/ 翻译:瓶哥 日期:2013年12月12日星期四 邮箱:414236069@qq.com 主页:htt ...

  2. [ZETCODE]wxWidgets教程七:对话框

    本教程原文链接:http://zetcode.com/gui/wxwidgets/dialogs/ 翻译:瓶哥 日期:2013年12月9日星期一 邮箱:414236069@qq.com 主页:http ...

  3. [ZETCODE]wxWidgets教程五:布局管理

    本教程原文链接:http://zetcode.com/gui/wxwidgets/layoutmanagement/ 翻译:瓶哥 日期:2013年12月4日星期三 邮箱:414236069@qq.co ...

  4. [ZETCODE]wxWidgets教程六:事件处理

    本教程原文链接:http://zetcode.com/gui/wxwidgets/events/ 翻译:瓶哥 日期:2013年12月7号星期六 邮箱:414236069@qq.com 主页:http: ...

  5. [ZETCODE]wxWidgets教程三:第一个窗体程序

    本教程原文链接:http://zetcode.com/gui/wxwidgets/firstprograms/ 翻译:瓶哥 日期:2013年11月27日星期三 邮箱:414236069@qq.com ...

  6. [ZETCODE]wxWidgets教程九:组件专题2

    本教程原文链接:http://zetcode.com/gui/wxwidgets/widgetsII/ 翻译:瓶哥 日期:2013年12月15日星期日 邮箱:414236069@qq.com 主页:h ...

  7. [ZETCODE]wxWidgets教程二:辅助类

    本教程原文链接:http://zetcode.com/gui/wxwidgets/helperclasses/ 翻译:瓶哥 日期:2013年11月27日星期三 邮箱:414236069@qq.com ...

  8. Qt5教程: (6) 菜单栏、工具栏、状态栏及核心控件

    1. 新建QMainWindow工程 取消生成.ui文件 2. 菜单栏 在mainwindow.cpp中添加头文件 和 #include <QMenuBar> #include <Q ...

  9. [ZETCODE]wxWidgets教程一:介紹

    本教程原文链接:http://zetcode.com/gui/wxwidgets/introduction/ 翻译:瓶哥 日期:2013年11月26日星期二 邮箱: 414236069@qq.com ...

随机推荐

  1. Github进行项目管理的常用命令总结

    最近项目中使用github来管理代码,将git的常用命令整理了一下,方便以后查询 查看git的本地配置git config --list 克隆到本地git clone (网页上面的那个http地址 g ...

  2. Libnids---编写网络应用程序的利器

    一.前言 Libnids是一个用于网络入侵检测开发的专业编程接口,它使用Libpcap进行数据包的捕获.同时,Libnids提供了TCP/IP数据流重组功能,因此省去了应用层自己考虑数据分片.重传等情 ...

  3. python相关博客

    入门:http://www.pythontip.com/ Python之禅--大道至简 美胜于丑,显胜于隐,简胜于繁,繁胜于杂,平胜于迭,疏胜于密,读胜于写...名可名, 请常名 http://www ...

  4. 【 java版坦克大战--绘图技术】 绘制坦克

    通过上一节,我们学会的用java绘图.那现在就用java绘制自己坦克. 首先通过分析坦克由这几部分组成.如图 各个部件的长宽如图.15,10为圆心. /** * 坦克游戏的1.0版 * 1.画出坦克 ...

  5. 针对IE的CSS hack 全面 实用

    .all IE{property:value\9;} .gte IE 8{property:value\0;} .lte IE 7{*property:value;} .IE 8/9{property ...

  6. SCOI2015题解 && 考试小结

    Day1: 第一题:裸地二分+网络流:二分答案,连接将每行每列拆成点,对于满足答案的格子行列连边,看是否流量是否大于t即可,可惜第k大看成了第k小,然后100分就没了. 第二题:倍增,考虑贪心算法,就 ...

  7. 【技术贴】关闭CMD错误提示声音

    关掉后,整个世界清静多了. cmd打开后 1. 禁用“嘀嘀”声的设备来源,这是由beep驱动服务所提供,可以将beep驱动的启动类型设置为禁用,可以打开CMD窗口,运行以下命令:永久禁用错误声音 sc ...

  8. iOS开发UI基础—手写控件,frame,center和bounds属性

    iOS开发UI基础—手写控件,frame,center和bounds属性 一.手写控件 1.手写控件的步骤 (1)使用相应的控件类创建控件对象 (2)设置该控件的各种属性 (3)添加控件到视图中 (4 ...

  9. 在KEIL中的模块化程序写法

    在使用KEIL的时候,我们习惯上在一个.c的文件中把自己要写的东西按照自己思路的顺序进行顺序书写.这样是很普遍的写法,当程序比较短的时候比如几十行或者一百多行,是没有什么问题的.但是当程序很长的时候, ...

  10. Ubuntu下安装Qt4.5(包括X86和ARM版本)

    条件:TQ2440开发板,虚拟机安装的Ubuntu10.04,安装好天嵌自带的GCC交叉编译器参考:http://blog.csdn.net/newnewman80/article/details/6 ...