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. 是那些拥有多个子项目的控件的基类.

顶层窗口类

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

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. 状态条用来在程序运行过程中显示运行期信息.

 

 

基础窗口类

窗口类wxWindow
wxWindow
窗口类既是一个重要的基类,也是一个你可以直接在代码中使用的类。

构造函数原型如下:

wxWindow(wxWindow* parent,
    wxWindowID id,
    const wxPoint& pos = wxDefaultPosition,
    const wxSize& size = wxDefaultSize,
    long style = 0,
    const wxString& name = wxT("panel"));

窗口类型

如果在创建窗口的时候你没有指定窗口的边框类型,那么在不同的平台上将会有不同的边框类型的缺省值。在windows平台上,控件边框的缺省值为 wxSUNKEN_BORDER,意为使用当前系统风格的边框。你可以使用类似wxNO_BORDER这样的值来覆盖系统的默认值。

wxSIMPLE_BORDER

在窗口周围显示一个瘦边框.

wxDOUBLE_BORDER

显示一个双层边框.

wxSUNKEN_BORDER

显示一个凹陷的边框,或者使用当前窗口风格设置.

wxRAISED_BORDER

显示一个凸起的边框.

wxSTATIC_BORDER

显示一个适合静态控件的边框. 只支持Windows平台.

wxNO_BORDER

不显示任何边框.

wxTRANSPARENT_WINDOW

定义一个透明窗口 (意思是这个窗口不接收paint事件).只支持windows平台.

wxTAB_TRAVERSAL

使用这个类型允许非Dialog窗口支持使用TAB进行遍历.

wxWANTS_CHARS

使用这个类型来允许窗口接收包括回车和TAB在内的所有的键盘事件。TAB用来在Dialog类型的窗口中遍历各控件。如果没有设置这个类型,这些特殊的按键事件将不会被产生。

wxFULL_REPAINT_ON_RESIZE

在默认情况下,在窗口客户区大小发生改变时,wxWidgets并不会重画整个客户区。设置这个类型将使得wxWidgets改变这种默认的作法,而保持整个客户区的刷新

wxVSCROLL

显示垂直滚动条.

wxHSCROLL

显示水平滚动条.

wxALWAYS_SHOW_SB

如果一个窗口有滚动条,那么在不需要滚动条的时候(当窗口足够大不需要使用滚动条的时候),禁止滚条而不隐藏滚动条。这个类型目前只支持Windows平台和wxWidgetswxUniversal版本.

wxCLIP_CHILDREN

只支持Windows平台,用于消除由于擦除子窗口的背景而引起的闪铄.

窗口的扩展类型,这些扩展类型不能直接和类型混用,而要使用wxWindow::SetExtraStyle函数来进行设置。

wxWS_EX_VALIDATE_RECURSIVELY

在默认情况下,Validate,transferDataToWindow,transferDataFromWindow只在窗口的直接子窗口上才可以使用。如果设置了这个扩展类型,那么将可以递归的在各个子窗口上使用。

wxWS_EX_BLOCK_EVENTS

wxCommandEvents事件将会在无法在当前事件表中找到匹配的时候在其父窗口中尝试匹配,设置这个扩展属性可以阻止这个行为。Dialog类型的窗口默认设置了这个类型,但是如果SetExtraStyle被应用程序类调用过的话,默认设置可能被覆盖.

wxWS_EX_TRANSIENT

不要使用这个窗口作为其它窗口的父窗口.这个类型一定只能用于瞬间窗口;否则,如果使用它作为一个dialog或者frame类型窗口的父窗口,如果父窗口在子窗口之前释放,可能导致系统崩溃。

wxWS_EX_PROCESS_IDLE

这个窗口应该处理所有的idle事件,包括那些设置了wxIDLE_PROCESS_SPECIFIED模式的idle事件。

wxWS_EX_PROCESS_UI_UPDATES

这个窗口将处理所有的Ui刷新事件,包括那些设置了wxUPDATE_UI_PROCESS_SPECIFIEDUI刷新事件。参考第9章获得和界面刷新有关的更多的内容.

窗口事件

EVT_WINDOW_CREATE(func)

用于处理wxEVT_CREATE事件, 这个事件在窗口刚刚被产生的时候生成,处理函数的参数类型是wxWindowCreateEvent.

EVT_WINDOW_DESTROY(func)

用于处理wxEVT_DELETE事件,在这个窗口即将被删除的时候产生,处理函数的参数类型是wxWindowDestroyEvent.

EVT_PAINT(func)

用于处理wxEVT_PAINT事件,在窗口需要被刷新的时候产生.处理函数的参数类型是wxPaintEvent.

EVT_ERASE_BACKGROUND(func)

用于处理wxEVT_ERASE_BACKGROUND事件,在窗口背景需要被更新的时候产生. 处理函数的参数是wxEraseEvent.

EVT_MOVE(func)

用于处理wxEVT_MOVE事件, 在窗口移动的时候产生.处理函数的参数类型是wxMoveEvent.

EVT_SIZE(func)

用于处理wxEVT_SIZE事件, 在窗口大小发生变化以后产生.处理函数的参数类型是wxSizeEvent.

EVT_SET_FOCUS(func)EVT_KILL_FOCUS(func)

用于处理wxEVT_SET_FOCUSwxEVT_KILL_FOCUS事件,在窗口得到或者失去键盘焦点的时候产生. 处理函数参数类型是wxFocusEvent.

EVT_SYS_COLOUR_CHANGED(func)

用于处理wxEVT_SYS_COLOUR_CHANGED事件,当用户在控制面板里更改了系统颜色的时候产生(只支持windows平台). 处理函数参数类型为wxSysColourChangedEvent.

EVT_IDLE(func)

用于处理wxEVT_IDLE事件,在空闲事件产生.处理函数参数类型位wxIdleEvent.

EVT_UPDATE_UI(func)

用于处理wxEVT_UPDATE_UI事件,在系统空闲时间产生用来给窗口一个更新自己的机会.

wxWindow类的成员函数

函数太多了,需要时再查询吧。

wxControl

wxControl是一个虚类。它继承自wxWindow,用来作为控件的基类: 所谓控件指的是那些可以显示数据项并且通常需要响应鼠标或者键盘事件的那些窗口类.

wxControlWithItems
wxControlWithItems也是一个虚类,用来作为wxWidgets的一些包含多个数据项的控件(比如wxListBox, wxCheckListBox,wxChoicewxComboBox等)的基类。使用这个基类的目的为了给这些具有相似功能的控件提供一致的API 数。

wxControlWithItems
的数据项拥有一个字符串和一个和这个字符串绑定的可选的客户数据。客户数据可以是两种类型,要么是无类型指针(void*),这意味这这个控件只帮忙存储客户数据但是永远不会使用客户数据。另外一种是有类型(wxClientData)指针,对于后一种情况,客户数据会在控件被释放或者数据项被清除的时候被自动释放。同一个控件的所有数据项必须拥有同样的客户区数据类型:要么是前者,要么是后者。客户区数据的类型是在第一次调用Append函数或者,SetClientData函数或者SetClientObject函数的时候被确定的。如果要使用有类型指针客户数据,你应该自定义一个继承自wxClientData的类,然后将它的实例指针传递给Append函数或者 SetClientObject函数。

你可能感兴趣的:(wxWidget窗口基础知识(1))