2024年4月3日发(作者:)

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;