首先必须包含wxWidgets的头文件。
1、可以在一个文件一个文件的基础上完成(如wx/window.h)
2、使用一个全局包含(wx/wx.h),其中包括大多数常用的头文件(虽然不是所有的头文件,因为wxWidgets的头文件太多,无法拉入所有的头文件)。
对于支持预编译头文件的平台,如WX_PRECOMP所示,这个全局头文件wx/wx.h已经包含在wx/wxprec.h中,所以我们可以只需要包含wx/wxprec.h。
#include
#ifndef WX_PRECOMP
#include
#endif
实际上,每个应用都应该定义一个派生自wxApp的新类。通过重写wxApp的OnInit()虚方法,程序可以被初始化,例如创建一个新的主窗口。
现在程序如下了
#include
#ifndef WX_PRECOMP
#include
#endif
// application class
class MyApp : public wxApp
{
public:
virtual bool OnInit();
};
主窗口是通过从wxFrame派生一个类并在构造函数中为其提供一个菜单和一个状态栏来创建的。此外,任何希望响应“事件”(如鼠标单击、菜单消息或按钮)的类都必须使用下面的宏声明一个事件表。
class MyFrame : public wxFrame
{
public:
MyFrame();
private:
void OnHello(wxCommandEvent& event);
void OnExit(wxCommandEvent& event);
void OnAbout(wxCommandEvent& event);
};
最后,对这类事件的响应是通过“事件处理程序”完成的,它只是函数(或功能词,如果使用c++ 11则包括lambdas),接受与被处理事件对应的类型的事件参数,例如wxCommandEvent用于来自简单控件的事件,如按钮、文本字段和菜单项。
对三个菜单项做出反应:自定义的“Hello”,以及“Exit”和“About”项(任何程序通常都应该实现后两者)。注意,这些处理程序不需要是虚拟的或公共的。
为了能够对菜单命令做出反应,它必须被赋予一个唯一的标识符,可以定义为const变量或enum元素。后者经常被使用,因为通常需要许多这样的常量:
enum
{
ID_Hello = 1
};
不需要为“About”和“Exit”定义标识符,因为wxWidgets已经预先定义了标准值,如wxID_ABOUT和wxID_EXIT。您应该尽可能地使用它们,因为它们可以由特定的平台以特殊的方式处理。
和所有程序一样,必须有一个“main”函数。在wxWidgets下,main是在wxIMPLEMENT_APP()宏中实现的,它创建指定类的应用程序实例并开始运行GUI事件循环。它可以简单地这样使用:
wxIMPLEMENT_APP(MyApp);
如上所述,wxApp::OnInit()在启动时被调用,应该用来初始化程序,可能会显示一个“启动画面”并创建主窗口(或几个)。默认情况下,框架是隐藏创建的,以允许在显示它们之前创建子窗口。因此,我们需要显式地显示它们。最后,从这个方法返回true,表示成功初始化:
bool MyApp::OnInit()
{
MyFrame *frame = new