#define AFX_MAINFRAME_H__1BC90331_B69E_40F2_BDF7_197550D70F07__INCLUDED_
#if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000
#include "wx_pch.h"
class MainFrame : public wxFrame { public: MainFrame(wxWindow* parent, const wxString& title); virtual ~MainFrame();
DECLARE_EVENT_TABLE() }; #endif // !defined(AFX_MAINFRAME_H__1BC90331_B69E_40F2_BDF7_197550D70F07__INCLUDED_)
mainframe.cpp
修改构造函数的定义: MainFrame::MainFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) { //wxTextCtrl* text = new wxTextCtrl(this, wxID_ANY, _("some text")); }
增加事件表定义(BEGIN_EVENT_TABLE 与 END_EVENT_TABLE 之间保留空白,留待以后绑定事件): BEGIN_EVENT_TABLE(MainFrame, wxFrame)
END_EVENT_TABLE()
最终 mainframe.cpp 的内容如下(其中经过手工改写的地方已用黄色背景突出显示): #include "mainframe.h"
BEGIN_EVENT_TABLE(MainFrame, wxFrame)
END_EVENT_TABLE()
MainFrame::MainFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) { //wxTextCtrl* text = new wxTextCtrl(this, wxID_ANY, _("some text")); }
MainFrame::~MainFrame() { }
至此,一个wxWidget的空白Project已经创建完毕,下图是其执行结果:
](/uploadImages/2007-5-2/20075222264046515.gif)
编译生成的 exe 文件的大小: 可执行文件大小 Debug Release Unicode 3.78M 956K 非Unicode 3.60M 932K
此数据全部是静态链接wxWidgets的结果。动态链接的话,EXE的大小没有意义——别忘了wxWidgets的版DLLs的大小总共约4到5M(Release版)。
添加子控件
向 wxFrame 或 wxDialog 中添加子控件是比较容易的,只需在其子类的构造函数中 new 相应的子控件就可以了。
这是最简单的情况: MainFrame::MainFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) { wxTextCtrl* text = new wxTextCtrl(this, wxID_ANY, _("some text")); }
没错,只要“new”一下就搞定了,控件会自动出现在wxFrame中。这是运行结果:
](/uploadImages/2007-5-2/20075222264154001.gif)
如果界面再复杂一些,上面这种方法就行不通了,我们需要引入“Sizer”(详见http://www.wxwidgets.org/manuals/2.6.3/wx_sizeroverview.html(Sizer一览),此处不作深入解释): MainFrame::MainFrame(wxWindow* parent, const wxString& title) : wxFrame(parent, wxID_ANY, title) { wxTextCtrl* textCtrl = new wxTextCtrl(this, ID_TEXTCTRL, _T("some text"), wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE ); wxButton* button = new wxButton(this, ID_BUTTON, _("测试按钮"), wxDefaultPosition, wxDefaultSize, 0 );
wxBoxSizer* vBoxSizer = new wxBoxSizer(wxVERTICAL); this->SetSizer(vBoxSizer);
vBoxSizer->Add(textCtrl, 1, wxALLwxEXPAND, 5); vBoxSizer->Add(button, 0, wxALIGN_CENTER_HORIZONTALwxALLwxALIGN_BOTTOM, 5); }
上面是多行编辑框控件,下面是按钮控件,当窗口大小变化时,编辑框控件将在水平和垂直方向上自动扩展,而按钮始终位于窗口底部居中。这是运行结果:
](/uploadImages/2007-5-2/20075222264176109.gif)
上述代码中涉及的控件ID(ID_TEXTCTRL,ID_BUTTON)是我们在 mainframe.cpp 中自行定义的(定义控件ID的目的是为了下一步了事件处理): enum CtrlID
上一篇:A Summary of Principles for User-Interface Design.
下一篇:给年轻工程师的十大忠告
|