
wxWidget窗口基础知识.docx
11页窗口解析窗口绘制当一个窗口需要重绘的时候,它将收到两个事件,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. 状态条用来在程序运行过程中显示运行期信息. 基础窗口类窗口类wxWindowwxWindow窗口类既是一个重要的基类,也是一个你可以直接在代码中使用的类。
构造函数原型如下: 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平台和wxWidgets的wxUniversal版本. 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_SPECIFIED的UI刷新事件参考第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)。
