wxApp::OnInit()在启动时调用,应该用于初始化程序,可能会显示“闪屏”并创建主窗口(或多个)。框架应该得到一个标题栏文本(“Hello World”)和一个位置和启动大小。一个框架也可以被声明为顶部窗口。返回true表示初始化成功。

bool MyApp::OnInit()
{MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );frame->Show( true );return true;
}

在主窗口(或以后)的构造函数中,我们创建了一个菜单,其中包含菜单项和主窗口底部显示的状态栏。两者都必须与各自调用的框架相关联。

MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame(NULL, wxID_ANY, title, pos, size)
{wxMenu *menuFile = new wxMenu;menuFile->Append(ID_Hello, "&Hello...\tCtrl-H","Help string shown in status bar for this menu item");menuFile->AppendSeparator();menuFile->Append(wxID_EXIT);wxMenu *menuHelp = new wxMenu;menuHelp->Append(wxID_ABOUT);wxMenuBar *menuBar = new wxMenuBar;menuBar->Append( menuFile, "&File" );menuBar->Append( menuHelp, "&Help" );SetMenuBar( menuBar );CreateStatusBar();SetStatusText( "Welcome to wxWidgets!" );
}

请注意,我们不需要为标准菜单项wxID_ABOUT和wxID_EXIT指定标签,它们将被赋予标准(甚至是正确翻译的)标签,以及针对当前平台的标准加速器,使您的程序行为更加本机化。因此,如果可能的话,您应该选择重用标准的id。
以下是标准的事件处理程序实现。OnExit()通过调用Close()关闭主窗口。参数true表示其他窗口没有否决权,比如在询问“您真的要关闭吗?”如果没有其他主窗口,应用程序将退出。

void MyFrame::OnExit(wxCommandEvent& event)
{Close( true );
}

MyFrame::OnAbout()将显示一个包含一些文本的小窗口。在本例中,是一个典型的“关于”窗口,其中包含有关程序的信息。

void MyFrame::OnAbout(wxCommandEvent& event)
{wxMessageBox( "This is a wxWidgets' Hello world sample","About Hello World", wxOK | wxICON_INFORMATION );
}

自定义菜单命令处理程序的实现可以执行任何任务,你的程序需要做什么,在这种情况下,我们将简单地显示一个消息,从它适合一个hello world的例子:

void MyFrame::OnHello(wxCommandEvent& event)
{wxLogMessage("Hello world from wxWidgets!");
}

全部程序如下

// wxWidgets "Hello world" Program
// For compilers that support precompilation, includes "wx/wx.h".
#include <wx/wxprec.h>
#ifndef WX_PRECOMP#include <wx/wx.h>
#endif
class MyApp: public wxApp
{public:virtual bool OnInit();
};
class MyFrame: public wxFrame
{public:MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
private:void OnHello(wxCommandEvent& event);void OnExit(wxCommandEvent& event);void OnAbout(wxCommandEvent& event);wxDECLARE_EVENT_TABLE();
};
enum
{ID_Hello = 1
};
wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)EVT_MENU(ID_Hello,   MyFrame::OnHello)EVT_MENU(wxID_EXIT,  MyFrame::OnExit)EVT_MENU(wxID_ABOUT, MyFrame::OnAbout)
wxEND_EVENT_TABLE()
wxIMPLEMENT_APP(MyApp);
bool MyApp::OnInit()
{MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) );frame->Show( true );return true;
}
MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame(NULL, wxID_ANY, title, pos, size)
{wxMenu *menuFile = new wxMenu;menuFile->Append(ID_Hello, "&Hello...\tCtrl-H","Help string shown in status bar for this menu item");menuFile->AppendSeparator();menuFile->Append(wxID_EXIT);wxMenu *menuHelp = new wxMenu;menuHelp->Append(wxID_ABOUT);wxMenuBar *menuBar = new wxMenuBar;menuBar->Append( menuFile, "&File" );menuBar->Append( menuHelp, "&Help" );SetMenuBar( menuBar );CreateStatusBar();SetStatusText( "Welcome to wxWidgets!" );
}
void MyFrame::OnExit(wxCommandEvent& event)
{Close( true );
}
void MyFrame::OnAbout(wxCommandEvent& event)
{wxMessageBox( "This is a wxWidgets' Hello world sample","About Hello World", wxOK | wxICON_INFORMATION );
}
void MyFrame::OnHello(wxCommandEvent& event)
{wxLogMessage("Hello world from wxWidgets!");
}

wxWidgets随笔(4)-hello,world相关推荐

  1. wxWidgets随笔(10)-fedora环境配置

    1.wxwidgets安装 sudo yum install wxGTK-devel sudo dnf install wxGTK wxGTK-devel wxGTK-gl wxBase wxsvg ...

  2. wxWidgets随笔(13)-wxBoxSizer类Basic Box Sizer(2)

    Add()的第一个参数显然是要添加的wxWindow或wxSizer.第二个选项在文档中以"option"的形式出现,但是用"proportion"可能更好.这 ...

  3. wxWidgets随笔(11)-wxFrame类

    wxFrame类是一个窗口,它的大小和位置(通常)可以由用户更改. 它通常有粗粗的边框和标题栏,还可以包含菜单栏.工具栏和状态栏.框架可以包含任何不是框架或对话框的窗口. 通过CreateStatus ...

  4. wxWidgets随笔(10)-wxApp类

    当wxUSE_GUI=1时,wxApp类表示应用程序本身. 除了wxAppConsole提供的功能外,它还跟踪顶部窗口(请参阅SetTopWindow())并增加对视频模式的支持(请参阅SetVide ...

  5. wxWidgets随笔(9)-utf8~wxString存储二进制数据(4)

    使用wxString存储二进制数据 可以使用函数wxString::To8BitData和wxString::From8BitData来存储二进制数据(即使它包含空值). 注意,即使允许使用NUL字符 ...

  6. wxWidgets随笔(7)-utf8中文(3)

    wxMessageBox("Hello, world!"); wxMessageBox(L"Salut \u00E0 toi!"); // U+00E0 is ...

  7. wxWidgets随笔(6)-utf8中文(2)

    当使用Microsoft Visual c++时不能编译,需要更改为使用mb_str()(这对于包含Unicode字符的文件名无效,请考虑使用wxWidgets类和函数来处理这些文件名,因为标准c++ ...

  8. wxWidgets随笔(5)-utf8中文(1)

    在wxWidgets 3.0中对Unicode的支持已经发生了根本的变化,很多与以前版本的库相关的现有资料已经不再正确. 臭名昭著的宏wxT()和_T()不再需要了.基本上,您可以从任何使用它们的代码 ...

  9. wxWidgets随笔(3)-hello,world

    不需要为"About"和"Exit"定义标识符.然后,我们实际实现一个事件表,其中的事件被路由分配到类MyFrame中各自的处理函数. 有预定义的宏用于路由分配 ...

最新文章

  1. ASP.NET MVC 的一个配置节点
  2. 一周一论文(翻译)——[VLDB 18] Chi:分布式流处理系统下可扩展的、可编程的控制计划模块
  3. Python中enumerate用法详解
  4. kotlin为什么比java编译慢_为什么Kotlin编译速度比Scala快? [关闭]
  5. 读jquery 权威指南[7]-性能优化与最佳实践
  6. 【LCT】魔法森林(P2387)
  7. java+jvm+log_java8添加并查看GC日志(ParNew+CMS)
  8. 5.4 机器翻译 数据集
  9. 安装应用需要打开未知来源权限_华为盒子安装不了第三方软件?不存在的,简单几步即可搞定...
  10. 二叉树的镜像(剑指 Offer 27)
  11. java开发的程序怎么用_java安装后怎么使用?第一次编写java程序
  12. mac自带的词典不能用
  13. NCCN指南下载以后无法复制,粘贴原因及PDF密码破解
  14. 鸿蒙 什么意思,鸿蒙是什么意思和拼音怎么读
  15. 一个“精神病”人的世界观
  16. 给电脑一个系统睡眠快捷方式,一键睡眠
  17. js 一段语音转换为文字 (暂时没有测试)
  18. 原子尺度仿真对材料设计效率的提升,是未来材料研发的关键核心竞争力
  19. 内网安全:Cobalt Strike 工具 渗透多层内网主机.(正向 || 反向)
  20. 各种经典源码,应有尽有

热门文章

  1. [黑马程序员二]:C#面向对象基础
  2. 程序员应该如何更有效率
  3. 分享一些好用的 Chrome 扩展
  4. nginx 中location中root和alias的区别
  5. TLS,SSL,HTTPS with Python(转)
  6. Java - Collection
  7. 王爽《汇编语言第三版》实验10-1代码实现
  8. sql 取汉字首字母
  9. POJ 1185 炮兵阵地 状压dp
  10. 学计算机怎样才能考上大学,中国式家长考清华北大方法 重点大学怎么才能考上...