1、关于构造函数:
MyFrame::MyFrame(const wxString& title)
: wxFrame(NULL, wxID_ANY, title)
这是MyFrame的构造函数,后面的: wxFrame(NULL, wxID_ANY, title)是最先执行的,用于调用它的基类wxFrame)的构造函数,这个基类的构造函数才真正创建了一个窗口的实例。我是这样理解这种调用的:将基类的部分或者所有参数传递给继承该基类的子类的构造函数。
构造函数MyFrame之前的MyFrame::示类名空间,指示MyFrame函数是属于MyFrame类的,这在之前的类定义中就能得到印证:
class MyFrame : public wxFrame
{
public:
// 主窗口类的构造函数
MyFrame(const wxString& title);
……
}
在对MyFrame类定义时,必须定义其构造函数(要求构造函数的名称和类名称一致),可以把一个类得构造函数理解成该类的一个特殊的成员函数(名称和类名一样),构造函数和其他成员函数一样都需要在类定义之后具体展开(对构造函数而言是初始化)。
2、关于wx的框架结构:
从程序的总体思路上来说:首先建立一个应用程序类,在该类的实例化过程中创建主窗口类,在主窗口的实例化中创建控件类(或者是子窗口),亦即:应用程序类(wxApp类)>>>创建>>>主窗口类(如wxFrame类)>>>创建>>>控件类(如wxbutton类)。
从代码的角度而言:首先必须将所有需要创建的类都事先定义好,包括类继承于哪个基类,包括哪些成员函数(包括构造函数)、成员变量。然后在类相应的构造函数中实例化对应的类,并创建包含的类。
程序运行的时候,最核心的也是最先执行的是以下这段代码,就像地基一样,所有的上层建筑(窗口和控件等等)都是建立在这段代码之上的:
bool MyApp::OnInit()
{
// 创建主窗口
MyFrame *frame = new MyFrame(wxT("Minimal wxWidgets App"));
// 显示主窗口
frame->Show(true);
// 开始事件处理循环
return true;
}
wxWidgets程序执行过程
(转自http://blog.csdn.net/bn007/article/details/3475674)
1)根据平台不同,函数main,WinMain或类似的函数运行(这个函数是由wxWidgets提供的,并不是应用程序)。wxWidgets初始化内部数据结构,创建一个wxApp实例(本例中为MyApp)。
2)wxWidgets调用MyApp::OnInit,创建一个wxFrame实例(本例中为MyFrame)。
3)MyFrame构造函数通过wxFrame的构造函数创建主窗口,并且增加菜单栏、状态条等各种控件。
4)MyApp::OnInit显示frame.
5)wxWidgets开始消息循环,等待事件发生,并把事件分配到相应的处理函数。
当主窗口销毁时,程序也随之结束。