2.5 Frame窗口的构造函数

最后,让我们来看看Frame窗口的构造函数,正是它实现了frame窗口的图标,菜单条和状态条。

#include "mondrian.xpm"



MyFrame::MyFrame(const wxString& title)
       : wxFrame(NULL, wxID_ANY, title)
{
    SetIcon(wxIcon(mondrian_xpm));
    wxMenu *fileMenu = new wxMenu;
    wxMenu *helpMenu = new wxMenu;
    helpMenu->Append(wxID_ABOUT, wxT("&About...\tF1"),
                     wxT("Show about dialog"));
    fileMenu->Append(wxID_EXIT, wxT("E&xit\tAlt-X"),
                     wxT("Quit this program"));
    wxMenuBar *menuBar = new wxMenuBar();
    menuBar->Append(fileMenu, wxT("&File"));
    menuBar->Append(helpMenu, wxT("&Help"));
    SetMenuBar(menuBar);
    CreateStatusBar(2);
    SetStatusText(wxT("Welcome to wxWidgets!"));
}

这个构造函数首先调用它的基类(wxFrame)的构造函数,使用的参数是父窗口(还没有父窗口,所以用NULL),窗口标识(wxID_ANY标识让 wxWidgets自己选择一个)和标题。这个基类的构造函数才真正创建了一个窗口的实例。除了这样的调用方法,还有另外一种方法是直接在构造函数里面显式调用基类默认的构造函数,然后调用wxFrame::Create函数来创建一个frame窗口的实例。

小图片或者是图标在所有的平台上都可以用XPM格式来表示。XPM文件其实是一个ASCII编码的完全符合C++语法的文本文件,所以可以直接用C++的方式包含到代码中(译者注:显然这样的包含方式在分发软件的时候是不需要分发这个图片文件的)。SetIcon那一行代码使用 mondrian_xpm变量在堆栈上创建了一个图标(这个mondrian变量是在mondrian.xpm文件里定义的)。然后将这个图标和 frame窗口关联在一起。

接下来创建了菜单条。增加菜单项的Append函数的三个参数的意义分别为:菜单项标识,菜单上的文本以及一个稍微长一些的帮助字符串。这个帮助字符串会自动在菜单项被高亮显示的时候自动显示在状态栏上。菜单上的文本中由"&"符号前导的字符将成为菜单的快捷操作符,在实际的显示中用下划线表示。而"\t"符号则前导一个全局的快捷键,这个快捷键甚至可以在菜单项没有显示的时候触发菜单功能。

这个构造函数所做的最后一件事是创建一个由两个区域组成的状态条并且在状态条的第一个区域写上欢迎的字样。