wxWidget窗口基础知识(1)
窗口解析

窗口绘制

当一个窗口需要重绘的时候,它将收到两个事件,wxEVT_ERASE_BACKGROUND事件用于通知应用程序重新绘制背景, wxEVT_PAINT则用于通知重新绘制前景。

颜和字体

每一个窗口都有一个前景和一个背景。默认的背景擦除函数会使用背景来清除窗口背景,如果没有设置背景,则会使用当前的系统皮肤推 荐的颜进行背景的清除。前景则相对来说很少被用到。

改变大小


当一个窗口的大小,无论是来自用户还是应用程序本身的原因,发生变化时,它将收到一个wxEVT_SIZE事件。如果这个窗口拥有子窗 口,它们可能需要被重新放置和重新计算大小。处理这种情况推荐的方法是使用sizer类。大多数已经确定的窗口类都有一个默认的大小和位置,这需要你在创建这些窗口的时候使用wxDefaultSize wxDefaultPosition这两个特殊的值。

输入

正变成活动状 态的窗口会收到wxEVT_SET_FOCUS事件,而正失去焦点的窗口会收到wxEVT_KILL_FOCUS事件。

空闲事件处理和用户界面更新

所有的窗口(除非特殊声明)都将收到空闲事件wxEVT_IDLE,这个事件是在所有其它的事件都
已经被处理完以后发出的。使用EVT_IDLE事件映射宏来处理。其中一个特殊的空闲时间操作就是进行用户界面更新,在这个操作中所有的窗口都可以定义一个函数来更新自己的状态。这个函数将会被周期性的 在系统空闲时调用。而EVT_UPDATE_UI(id, func)这个宏则通常不需要作什么事情。

窗口的创建和删除

一般来说,窗口都是在堆上使用new方法创建的。大多数的窗口类都可以通过两种方法被创建:单步创建和两步创建。



使用一步创建的方法:wxButton* button  = new wxButton(parent, wxID_OK);

除非是frame或者dialog窗口,对于别的窗口,都必须在构造函数中传入一个非空的父窗口。
这会自动把这个新窗口作为这个父窗口的子窗口。当父窗口被释放的时候,它的所有的子窗口也将被释放。



两步创建的意思是说,你先使用默认的构造函数创建一个实例,然后再使用这个实例Create方法实际创建这个对象。Create的参数和前面使用的构造函数的参数完全相同。

wxButton* button  = new wxButton;
button->Create(parent, wxID_OK);

窗口在你调用Create函数的时候会收到wxEVT_CREATE事件,你可以对这个事件进行进一步的处理。

使用两步创建的原因是什么呢?第一个原因是有时侯你可能想在晚些时候,在真正需要的时
候才完整的创建窗口。另外一个原因是你希望在调用 Create函数之前设置窗口的某些属性值。



窗口是通过调用其Destroy函数(对于顶层窗口来说)或者delete函数(对于其子窗口来说)来释放的。wxEVT_DESTROY事件会在窗口刚刚要被释放之前被调用。实际上,子窗口是被自动释放的,所以delete函数是很少直接被手动调用的。

窗口类型

窗口拥有一个类型和一个扩展类型。窗口类型是设置窗口创建时的行为和外观的一种简洁的方法。这些类型的值被设置成可以使用类似比特位的方法操作,例如下面的例子:

wxCAPTION | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxTHICK_FRAME




窗口类概览

基本窗口类

wxWindow. 这是所有窗口类的基类。

wxControl. 所有控件(比如wxButton)的基类.

wxControlWithItems. 是那些拥有多个子项目的控件的基类. statusbar是什么意思

顶层窗口类

顶层窗口类通常指那些独立的位于桌面上的类。

wxFrame. 一个可以包含其他窗口,并且大小可变的窗口类。

wxMDIParentFrame. 是一个可以管理其他Frame类的类.

wxMDIChildFrame. 是一个可以被其父窗口管理的frame.

wxDialog. 是一种可变大小的用于给用户提供选项的窗口类.

wxPopupWindow. 是一种暂态的只有很少修饰的顶层窗口.

容器窗口类

容器窗口类可以管理其他窗口


wxPanel. 这是一个给其它窗口提供布局的窗口.

wxNotebook. 可以实用TAB页面进行切换的窗口.

wxScrolledWindow. 可以有滚动条的窗口.

wxSplitterWindow. 可以管理两个子窗口的一种特殊窗口类.

非静态控件窗口类
这些控件是用户可以操作或者编辑的。

wxButton. 一种拥有一个标签的按钮控件.

wxBitmapButton. 一种拥有图片和标签的按钮控件.


wxChoice. 拥有一个下拉列表的选择控件.

wxComboBox. 拥有一组选项的可编辑的选择控件.

wxCheckBox. 拥有一个复选框的控件,复选框有选中和未选中两种状态.

wxListBox. 拥有一组可选择的字符串项目的列表框.

wxRadioBox. 拥有一组选项的单选框.

wxRadioButton. 单选框.

wxScrollBar. 滚动条控件。

wxSpinButton. 一个拥有增加和减小两个选项的按钮.

wxSpinCtrl. 拥有一个文本编辑框和一个wxSpinButton用来编辑整数.

wxSlider. 这个控件用来在一个固定的范围内选择一个整数.

wxTextCtrl. 单行或者多行的文本编辑框.

wxToggleButton. 两态按钮.

静态控件
这些控件提供不能被最终用户编辑的静态信息

wxGauge. 用来显式数量的控件.

wxStaticText. 文字标签控件.

wxStaticBitmap. 用来显示一幅静态图片.

wxStaticLine. 用来显式静态的一行.

wxStaticBox. 用来在别的控件周围显示一个静态的方框.

控件条
控件条通常在Frame窗口中使用,用来为信息或者命令的访问提供快捷操作

wxMenuBar. wxFrame上的菜单条.

wxToolBar. 工具条.

wxStatusBar. 状态条用来在程序运行过程中显示运行期信息.