文件名称:
使用wxWidgets进行跨平台程序开发
开发工具:
文件大小: 6mb
下载次数: 0
上传时间: 2011-12-21
详细说明: 目录 1 介绍 1.1 什么是wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 为什么选择wxWidgets? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 wxWidgets的历史. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 wxWidgets社区. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.5 wxWidgets和面向对象编程. . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 许可协议. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.7 wxWidgets的体系结构. . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7.1 wxMSW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7.2 wxGTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7.3 wxX11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.7.4 wxMotif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.7.5 wxMac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.7.6 wxCocoa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.7.7 wxWinCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7.8 wxPalmOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7.9 wxOS2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7.10 wxMGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.7.11 内部组织. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 1.8 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2 开始使用15 2.1 一个小例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.2 应用程序类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.3 Frame窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.4 事件处理函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.5 Frame窗口的构造函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3 · 4 · 目录 2.6 完整的例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.7 编译和运行程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.8 wxWidgets程序一般执行过程. . . . . . . . . . . . . . . . . . . . . . . . . 21 2.9 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3 事件处理23 3.1 事件驱动编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.2 事件表和事件处理过程. . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3 过滤某个事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.4 挂载事件表. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5 动态事件处理方法. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.6 窗口标识符. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.7 自定义事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.8 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4 窗口的基础知识34 4.1 窗口解析. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.1 窗口的概念. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.1.2 客户区和非客户区. . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.3 滚动条. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.4 光标和鼠标指针. . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.5 顶层窗口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.6 座标体系. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.7 窗口绘制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.1.8 颜色和字体. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.1.9 窗口变体. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.1.10 改变大小. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.1.11 输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.1.12 空闲事件处理和用户界面更新. . . . . . . . . . . . . . . . . . . . . 36 4.1.13 窗口的创建和删除. . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.14 窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 目录· 5 · 4.2 窗口类概览. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.1 基本窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.2 顶层窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.2.3 容器窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2.4 非静态控件窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2.5 静态控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.2.6 菜单. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.2.7 控件条. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3 基础窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3.1 窗口类wxWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3.2 窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4.3.3 窗口事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.4 wxWindow类的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 41 4.3.5 wxControl类. . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.6 wxControlWithItems类. . . . . . . . . . . . . . . . . . . . . . . . 46 4.3.7 wxControlWithItems的成员函数. . . . . . . . . . . . . . . . . . . . 47 4.4 顶层窗口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.4.1 wxFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.4.2 wxFrame的窗口类型比特位. . . . . . . . . . . . . . . . . . . . . . 49 4.4.3 wxFrame的事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.4.4 wxFrame的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 50 4.4.5 小型frame窗口. . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.4.6 wxMDIParentFrame . . . . . . . . . . . . . . . . . . . . . . . . . . 54 4.4.7 wxMDIParentFrame的窗口类型. . . . . . . . . . . . . . . . . . . . . 55 4.4.8 wxMDIParentFrame的成员函数. . . . . . . . . . . . . . . . . . . . . 55 4.4.9 wxMDIChildFrame . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.10 wxMDIChildFrame的窗口类型. . . . . . . . . . . . . . . . . . . . . 56 4.4.11 wxMDIChildFrame的成员函数. . . . . . . . . . . . . . . . . . . . . 56 4.4.12 wxDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.4.13 wxDialog的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . 58 · 6 · 目录 4.4.14 wxDialog事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.15 wxDialog的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 59 4.4.16 wxPopupWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.5 容器窗口. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.5.1 wxPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.5.2 wxPanel的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . 61 4.5.3 wxPanel的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 61 4.5.4 wxNotebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4.5.5 Notebook窗口主题管理. . . . . . . . . . . . . . . . . . . . . . . . 63 4.5.6 wxNotebook的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 63 4.5.7 wxNotebook的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.5.8 wxNotebook的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 64 4.5.9 wxNotebook的替代选择. . . . . . . . . . . . . . . . . . . . . . . . 64 4.5.10 wxScrolledWindow . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.5.11 wxScrolledWindow的窗口类型. . . . . . . . . . . . . . . . . . . . . 66 4.5.12 wxScrolledWindow的事件. . . . . . . . . . . . . . . . . . . . . . . 66 4.5.13 wxScrolledWindow的成员函数介绍. . . . . . . . . . . . . . . . . . . 66 4.5.14 滚动非wxScrolledWindow类型的窗口. . . . . . . . . . . . . . . . . . 67 4.5.15 wxSplitterWindow . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.5.16 wxSplitterWindow的窗口类型. . . . . . . . . . . . . . . . . . . . . 69 4.5.17 wxSplitterWindow事件. . . . . . . . . . . . . . . . . . . . . . . . 69 4.5.18 wxSplitterWindow的成员函数. . . . . . . . . . . . . . . . . . . . . 69 4.5.19 布局控件中使用wxSplitterWindow的说明. . . . . . . . . . . . . . . . 71 4.5.20 wxSplitterWindow的替代者. . . . . . . . . . . . . . . . . . . . . . 71 4.6 非静态控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.6.1 wxButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 4.6.2 wxButton的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . 73 4.6.3 wxButton的事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 73 4.6.4 wxButton的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 73 4.6.5 wxButton的标签. . . . . . . . . . . . . . . . . . . . . . . . . . . 73 目录· 7 · 4.6.6 wxBitmapButton . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 4.6.7 wxBitmapButton的窗口类型. . . . . . . . . . . . . . . . . . . . . . 77 4.6.8 wxBitmapButton事件. . . . . . . . . . . . . . . . . . . . . . . . . 77 4.6.9 wxBitmapButton的成员函数. . . . . . . . . . . . . . . . . . . . . . 77 4.6.10 wxChoice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.6.11 wxChoice的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . 78 4.6.12 wxChoice的事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.6.13 wxChoice的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 78 4.6.14 wxComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.6.15 wxComboBox的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 79 4.6.16 wxComboBox的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 79 4.6.17 wxComboBox的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 79 4.6.18 wxCheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.6.19 wxCheckBox的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 80 4.6.20 wxCheckBox的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.6.21 wxCheckBox的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 80 4.6.22 wxListBox 和wxCheckListBox . . . . . . . . . . . . . . . . . . . . 81 4.6.23 wxListBox和wxCheckListBox的窗口类型. . . . . . . . . . . . . . . . 82 4.6.24 wxListBox的wxCheckListBox事件. . . . . . . . . . . . . . . . . . . 82 4.6.25 wxListBox 成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 83 4.6.26 wxCheckListBox的成员函数. . . . . . . . . . . . . . . . . . . . . 83 4.6.27 wxRadioBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.6.28 wxRadioBox的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 84 4.6.29 wxRadioBox事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 84 4.6.30 wxRadioBox成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 84 4.6.31 wxRadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 4.6.32 wxRadioButton的窗口类型. . . . . . . . . . . . . . . . . . . . . . 85 4.6.33 wxRadioButton的事件. . . . . . . . . . . . . . . . . . . . . . . . 85 4.6.34 wxRadioButton的成员函数. . . . . . . . . . . . . . . . . . . . . . 86 4.6.35 wxScrollBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 · 8 · 目录 4.6.36 wxScrollBar的窗口类型. . . . . . . . . . . . . . . . . . . . . . . 86 4.6.37 wxScrollBar的事件. . . . . . . . . . . . . . . . . . . . . . . . . 86 4.6.38 wxScrollBar的成员函数. . . . . . . . . . . . . . . . . . . . . . . 87 4.6.39 wxSpinButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 4.6.40 wxSpinButton的窗口类型. . . . . . . . . . . . . . . . . . . . . . . 87 4.6.41 wxSpinButton的事件. . . . . . . . . . . . . . . . . . . . . . . . . 88 4.6.42 wxSpinButton的成员函数. . . . . . . . . . . . . . . . . . . . . . . 88 4.6.43 wxSpinCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 4.6.44 wxSpinCtrl的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 89 4.6.45 wxSpinCtrl事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.6.46 wxSpinCtrl成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 89 4.6.47 wxSlider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 4.6.48 wxSlider的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . 90 4.6.49 wxSlider的事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 90 4.6.50 wxSlider的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 90 4.6.51 wxTextCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 4.6.52 wxTextCtrl的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 92 4.6.53 wxTextCtrl的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.6.54 wxTextCtrl的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 93 4.6.55 wxToggleButton . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 4.6.56 wxToggleButton的窗口类型. . . . . . . . . . . . . . . . . . . . . . 94 4.6.57 wxToggleButton事件. . . . . . . . . . . . . . . . . . . . . . . . . 94 4.6.58 wxToggleButton的成员函数. . . . . . . . . . . . . . . . . . . . . . 95 4.7 静态控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.7.1 进度条. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.7.2 wxGauge的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . . 95 4.7.3 wxGauge事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.7.4 wxStaticText . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.7.5 wxStaticText的窗口类型. . . . . . . . . . . . . . . . . . . . . . . 96 4.7.6 wxStaticText的成员函数. . . . . . . . . . . . . . . . . . . . . . . 96 目录· 9 · 4.7.7 wxStaticBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 4.7.8 wxStaticBitmap的窗口类型. . . . . . . . . . . . . . . . . . . . . . 97 4.7.9 wxStaticBitmap的成员函数. . . . . . . . . . . . . . . . . . . . . . 97 4.7.10 wxStaticLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.7.11 wxStaticLine的窗口类型. . . . . . . . . . . . . . . . . . . . . . . 97 4.7.12 wxStaticLine的成员函数. . . . . . . . . . . . . . . . . . . . . . . 97 4.7.13 wxStaticBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.7.14 wxStaticBox的窗口类型. . . . . . . . . . . . . . . . . . . . . . . 98 4.7.15 wxStaticBox的成员函数. . . . . . . . . . . . . . . . . . . . . . . 98 4.8 菜单. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.8.1 wxMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 4.8.2 wxMenu的事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 4.8.3 wxMenu的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . . 101 4.9 控制条. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.9.1 wxMenuBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.9.2 wxMenuBar的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 103 4.9.3 wxMenuBar事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 103 4.9.4 wxMenuBar成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 103 4.9.5 wxToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 4.9.6 wxToolBar的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 105 4.9.7 wxToolBar的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 105 4.9.8 wxToolBar的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 106 4.9.9 wxStatusBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 4.9.10 wxStatusBar的事件. . . . . . . . . . . . . . . . . . . . . . . . . 108 4.9.11 wxStatusBar的成员函数. . . . . . . . . . . . . . . . . . . . . . . 108 4.10 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 5 绘画和打印110 5.1 理解设备上下文. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 5.1.1 可用的设备上下文. . . . . . . . . . . . . . . . . . . . . . . . . . 111 · 10 · 目录 5.1.2 使用wxClientDC在窗口客户区进行绘画. . . . . . . . . . . . . . . . . 111 5.1.3 擦除窗口背景. . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 5.1.4 使用wxPaintDC在窗口上绘画. . . . . . . . . . . . . . . . . . . . . 113 5.1.5 使用wxMemoryDC在位图上绘图. . . . . . . . . . . . . . . . . . . . . 115 5.1.6 使用wxPrinterDC和wxPostScriptDC实现打印. . . . . . . . . . . . . . 116 5.2 绘画工具. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 5.2.1 wxColour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 5.2.2 wxPen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 5.2.3 wxBrush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 5.2.4 wxFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.2.5 wxPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.3 设备上下文中的绘画函数. . . . . . . . . . . . . . . . . . . . . . . . . . . 124 5.3.1 绘制文本. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 5.3.2 绘制线段和形状. . . . . . . . . . . . . . . . . . . . . . . . . . . 128 5.3.3 使用云行规画平滑曲线. . . . . . . . . . . . . . . . . . . . . . . . 130 5.3.4 绘制位图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 5.3.5 填充特定区域. . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5.3.6 逻辑函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.4 使用打印框架. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.4.1 关于wxPrintout的更多内容. . . . . . . . . . . . . . . . . . . . . 135 5.4.2 在类Unix系统上的GTK+版本上的打印. . . . . . . . . . . . . . . . . 139 5.5 使用wxGLCanvas绘制三维图形. . . . . . . . . . . . . . . . . . . . . . . . . 140 5.6 本章小节. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 6 处理用户输入143 6.1 鼠标输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 6.1.1 处理按钮和鼠标指针移动事件. . . . . . . . . . . . . . . . . . . . . 143 6.1.2 处理鼠标滚轮事件. . . . . . . . . . . . . . . . . . . . . . . . . . 145 6.2 处理键盘事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 6.2.1 字符事件处理的例子. . . . . . . . . . . . . . . . . . . . . . . . 148 目录· 11 · 6.2.2 按键编码翻译. . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 6.2.3 修饰键变量. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6.2.4 加速键. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6.3 处理游戏手柄事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 6.3.1 wxJoystick的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 153 6.3.2 wxJoystickEvent的成员函数. . . . . . . . . . . . . . . . . . . . . 153 6.3.3 wxJoystick成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 154 6.4 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 7 使用布局控件进行窗口布局155 7.1 窗口布局基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 7.2 窗口布局控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 7.2.1 布局控件的通用特性. . . . . . . . . . . . . . . . . . . . . . . . . 157 7.3 使用布局控件进行编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 7.3.1 使用wxBoxSizer进行编程. . . . . . . . . . . . . . . . . . . . . . . 159 7.3.2 使用wxStaticBoxSizer编程. . . . . . . . . . . . . . . . . . . . . . 162 7.3.3 使用wxGridSizer编程. . . . . . . . . . . . . . . . . . . . . . . . 162 7.3.4 使用wxFlexGridSizer编程. . . . . . . . . . . . . . . . . . . . . . 163 7.3.5 使用wxGridBagSizer编程. . . . . . . . . . . . . . . . . . . . . . . 165 7.4 更多关于布局的话题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 7.4.1 对话框单位. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 7.4.2 平台自适应布局. . . . . . . . . . . . . . . . . . . . . . . . . . . 166 7.4.3 动态布局. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 7.5 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 8 使用标准对话框169 8.1 信息对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 8.1.1 wxMessageDialog . . . . . . . . . . . . . . . . . . . . . . . . . . 169 8.1.2 wxMessageDialog使用举例. . . . . . . . . . . . . . . . . . . . . . 170 8.1.3 wxMessageBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 8.1.4 wxProgressDialog . . . . . . . . . . . . . . . . . . . . . . . . . . 171 · 12 · 目录 8.1.5 wxProgressDialog使用举例. . . . . . . . . . . . . . . . . . . . . . 172 8.1.6 wxBusyInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 8.1.7 wxBusyInfo使用举例. . . . . . . . . . . . . . . . . . . . . . . . . 173 8.1.8 wxShowTip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 8.1.9 wxShowTip使用举例. . . . . . . . . . . . . . . . . . . . . . . . . 174 8.2 文件和目录对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 8.2.1 wxFileDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 8.2.2 wxFileDialog的类型. . . . . . . . . . . . . . . . . . . . . . . . . 177 8.2.3 wxFileDialog的成员函数. . . . . . . . . . . . . . . . . . . . . . . 177 8.2.4 wxFileDialog例子. . . . . . . . . . . . . . . . . . . . . . . . . . 177 8.2.5 wxDirDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 8.2.6 wxDirDialog成员函数. . . . . . . . . . . . . . . . . . . . . . . . 178 8.2.7 wxDirDialog使用举例. . . . . . . . . . . . . . . . . . . . . . . . 178 8.3 选择和选项对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 8.3.1 wxColourDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 8.3.2 wxColourData的成员函数. . . . . . . . . . . . . . . . . . . . . . . 181 8.3.3 wxColourDialog使用举例. . . . . . . . . . . . . . . . . . . . . . . 181 8.3.4 wxFontDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 8.3.5 wxFontData的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 184 8.3.6 字体选择使用举例. . . . . . . . . . . . . . . . . . . . . . . . . . 184 8.3.7 wxSingleChoiceDialog . . . . . . . . . . . . . . . . . . . . . . . . 185 8.3.8 wxSingleChoiceDialog使用举例. . . . . . . . . . . . . . . . . . . . 185 8.3.9 wxMultiChoiceDialog使用举例. . . . . . . . . . . . . . . . . . . . 186 8.4 输入对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 8.4.1 wxNumberEntryDialog . . . . . . . . . . . . . . . . . . . . . . . . 187 8.4.2 wxNumberEntryDialog使用举例. . . . . . . . . . . . . . . . . . . . 187 8.4.3 wxTextEntryDialog和wxPasswordEntryDialog . . . . . . . . . . . . . . 188 8.4.4 wxTextEntryDialog使用举例. . . . . . . . . . . . . . . . . . . . . 188 8.4.5 wxFindReplaceDialog . . . . . . . . . . . . . . . . . . . . . . . . 188 8.4.6 wxFindReplaceDialog对话框的相关事件. . . . . . . . . . . . . . . . 189 目录· 13 · 8.4.7 wxFindDialogEvent的成员函数. . . . . . . . . . . . . . . . . . . . 189 8.4.8 向对话框传递数据. . . . . . . . . . . . . . . . . . . . . . . . . . 190 8.4.9 wxFindReplaceData的成员函数. . . . . . . . . . . . . . . . . . . . 190 8.4.10 查找和替换使用举例. . . . . . . . . . . . . . . . . . . . . . . . . 190 8.5 打印对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 8.5.1 wxPageSetupDialog . . . . . . . . . . . . . . . . . . . . . . . . . 192 8.5.2 wxPageSetupData成员函数. . . . . . . . . . . . . . . . . . . . . . 193 8.5.3 wxPageSetupDialog使用举例. . . . . . . . . . . . . . . . . . . . . 194 8.5.4 wxPrintDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 8.5.5 wxPrintDialogData的成员函数. . . . . . . . . . . . . . . . . . . . 195 8.5.6 wxPrintDialog使用举例. . . . . . . . . . . . . . . . . . . . . . . 197 8.6 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 9 创建定制的对话框198 9.1 创建定制对话框的步骤. . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 9.2 一个例子:PersonalRecordDialog . . . . . . . . . . . . . . . . . . . . . . . 198 9.2.1 派生一个新类. . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 9.2.2 设计数据存储. . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 9.2.3 编码产生控件和布局. . . . . . . . . . . . . . . . . . . . . . . . . 200 9.2.4 数据传输和验证. . . . . . . . . . . . . . . . . . . . . . . . . . 202 9.2.5 处理事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 9.2.6 处理UI更新. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 9.2.7 增加帮助信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 9.2.8 完整的例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9.2.9 调用这个对话框. . . . . . . . . . . . . . . . . . . . . . . . . . . 208 9.3 在小型设备上调整你的对话框. . . . . . . . . . . . . . . . . . . . . . . . . 208 9.4 一些更深入的话题. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 9.4.1 键盘导航. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 9.4.2 数据和用户界面分离. . . . . . . . . . . . . . . . . . . . . . . . . 210 9.4.3 布局. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 · 14 · 目录 9.4.4 美学. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 9.4.5 对话框的替代品. . . . . . . . . . . . . . . . . . . . . . . . . . . 211 9.5 使用wxWidgets资源文件. . . . . . . . . . . . . . . . . . . . . . . . . . . 211 9.5.1 加载资源文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 9.5.2 使用二进制和嵌入式资源文件. . . . . . . . . . . . . . . . . . . . 212 9.5.3 资源翻译. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 9.5.4 XRC的文件格式. . . . . . . . . . . . . . . . . . . . . . . . . . . 214 9.5.5 编写资源处理类. . . . . . . . . . . . . . . . . . . . . . . . . . . 215 9.5.6 外来控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 9.6 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 10 使用图像编程217 10.1 wxWidgets中图片相关的类. . . . . . . . . . . . . . . . . . . . . . . . . . 217 10.2 使用wxBitmap编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 10.2.1 创建一个wxBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . 219 10.2.2 设置一个wxMask . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 10.2.3 XPM图形格式. . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 10.2.4 使用位图绘画. . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 10.2.5 打包位图资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 10.3 使用wxIcon编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 10.3.1 创建一个wxIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 10.3.2 使用wxIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 10.4 使用wxCursor编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 10.4.1 创建一个光标. . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 10.4.2 使用wxCursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 10.5 使用wxImage编程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 10.5.1 加载和保存图像. . . . . . . . . . . . . . . . . . . . . . . . . . . 230 10.5.2 透明. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 10.5.3 变形. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 10.5.4 颜色消减. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 目录· 15 · 10.5.5 直接操作wxImage 的元数据. . . . . . . . . . . . . . . . . . . . . . 233 10.6 图片列表和图标集. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 10.7 自定义wxWidgets提供的小图片. . . . . . . . . . . . . . . . . . . . . . . . 235 10.8 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 11 剪贴板和拖放操作238 11.1 数据对象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 11.1.1 数据源的职责. . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 11.1.2 数据目标的职责. . . . . . . . . . . . . . . . . . . . . . . . . . . 239 11.2 使用剪贴板. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 11.3 实现拖放操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 11.3.1 实现拖放源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 11.3.2 实现一个拖放目的. . . . . . . . . . . . . . . . . . . . . . . . . . 243 11.3.3 使用标准的拖放目的对象. . . . . . . . . . . . . . . . . . . . . . . 244 11.3.4 创建一个自定义的拖放目的. . . . . . . . . . . . . . . . . . . . . . 245 11.3.5 更多关于wxDataObject的知识. . . . . . . . . . . . . . . . . . . . . 245 11.3.6 实现wxDataObject的派生类. . . . . . . . . . . . . . . . . . . . . . 246 11.3.7 wxWidgets的拖放操作例子. . . . . . . . . . . . . . . . . . . . . . 247 11.3.8 wxWidgets中的拖放相关的一些帮助. . . . . . . . . . . . . . . . . . 254 11.4 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 12 高级窗口控件259 12.1 wxTreeCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 12.1.1 wxTreeCtrl的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 260 12.1.2 wxTreeCtrl的事件. . . . . . . . . . . . . . . . . . . . . . . . . . 260 12.1.3 wxTreeCtrl的成员函数. . . . . . . . . . . . . . . . . . . . . . . . 260 12.2 wxListCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.2.1 wxListCtrl的窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 263 12.2.2 wxListCtrl事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 263 12.2.3 wxListItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 12.2.4 wxListCtrl成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 265 · 16 · 目录 12.2.5 使用wxListCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 12.2.6 虚列表控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 12.3 wxWizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268 12.3.1 wxWizard事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 12.3.2 wxWizard的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . 269 12.3.3 wxWizard使用举例. . . . . . . . . . . . . . . . . . . . . . . . . . 269 12.4 wxHtmlWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 12.4.1 wxHtmlWindow窗口类型. . . . . . . . . . . . . . . . . . . . . . . . 276 12.4.2 wxHtmlWindow成员函数. . . . . . . . . . . . . . . . . . . . . . . . 276 12.4.3 在网页中集成窗口控件. . . . . . . . . . . . . . . . . . . . . . . . 277 12.4.4 HTML打印. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 12.5 wxGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 12.5.1 wxGrid系统中的类. . . . . . . . . . . . . . . . . . . . . . . . . . 280 12.5.2 wxGrid的事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 12.5.3 wxGrid的成员函数. . . . . . . . . . . . . . . . . . . . . . . . . . 281 12.6 wxTaskBarIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 12.6.1 wxTaskBarIcon的事件. . . . . . . . . . . . . . . . . . . . . . . . 287 12.6.2 wxTaskBarIcon成员函数. . . . . . . . . . . . . . . . . . . . . . . 287 12.7 编写自定义的控件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 12.7.1 自定义控件的类声明. . . . . . . . . . . . . . . . . . . . . . . . . 288 12.7.2 增加DoGetBestSize函数. . . . . . . . . . . . . . . . . . . . . . . 290 12.7.3 定义一个新的事件类. . . . . . . . . . . . . . . . . . . . . . . . . 290 12.7.4 显示控件信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 12.7.5 处理输入. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 12.7.6 定义默认事件处理函数. . . . . . . . . . . . . . . . . . . . . . . . 292 12.7.7 实现验证器. . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 12.7.8 实现资源处理器. . . . . . . . . . . . . . . . . . . . . . . . . . . 294 12.7.9 检测控件显示效果. . . . . . . . . . . . . . . . . . . . . . . . . . 294 12.7.10 一个更复杂一点的例子:wxThumbnailCtrl . . . . . . . . . . . . . . . . 295 12.8 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 13 数据结构类302 13.1 为什么没有使用STL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 13.2 字符串类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 13.2.1 使用wxString . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 13.2.2 wxString,字符以及字符串常量. . . . . . . . . . . . . . . . . . . . 303 13.2.3 wxString到C指针的转换基础. . . . . . . . . . . . . . . . . . . . . 303 13.2.4 标准C的字符串处理函数. . . . . . . . . . . . . . . . . . . . . . . 305 13.2.5 和数字的相互转换. . . . . . . . . . . . . . . . . . . . . . . . . . 305 13.2.6 wxStringTokenizer . . . . . . . . . . . . . . . . . . . . . . . . . 305 13.2.7 wxRegEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 13.3 wxArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 13.3.1 数组类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 13.3.2 wxArrayString . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 13.3.3 数组示例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 13.4 wxList和wxNode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 13.5 wxHashMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 13.6 存储和使用日期和时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 13.6.1 wxDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 13.6.2 wxDateTime类的构造和更改. . . . . . . . . . . . . . . . . . . . . . 313 13.6.3 wxDateTime访问方法. . . . . . . . . . . . . . . . . . . . . . . . . 314 13.6.4 获取当前时间. . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 13.6.5 时间和字符串的转换. . . . . . . . . . . . . . . . . . . . . . . . . 314 13.6.6 日期比较. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 13.6.7 日期计算. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 13.7 其它常用的数据类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 13.7.1 wxObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 13.7.2 wxLongLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 13.7.3 wxPoint和wxRealPoint . . . . . . . . . . . . . . . . . . . . . . . . 317 13.7.4 wxRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 13.7.5 wxRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 13.7.6 wxSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 13.7.7 wxVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 13.8 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 14 文件和流操作320 14.1 文件类和函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 14.1.1 wxFile和wxFFile . . . . . . . . . . . . . . . . . . . . . . . . . . 320 14.1.2 wxTextFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 14.1.3 wxTempFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 14.1.4 wxDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 14.1.5 wxFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 14.1.6 文件操作函数. . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 14.2 流操作相关类. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 14.2.1 文件流. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 14.2.2 内存和字符串流. . . . . . . . . . . . . . . . . . . . . . . . . . . 326 14.2.3 读写数据类型. . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 14.2.4 Socket流. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 14.2.5 过滤器流对象. . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 14.2.6 Zip流对象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 14.2.7 虚拟文件系统. . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 14.3 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 15 内存管理,调试和错误处理331 15.1 内存管理基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 15.1.1 创建和释放窗口对象. . . . . . . . . . . . . . . . . . . . . . . . . 331 15.1.2 创建和复制绘画对象. . . . . . . . . . . . . . . . . . . . . . . . . 332 15.1.3 在应用程序退出时执行清理. . . . . . . . . . . . . . . . . . . . . . 333 15.2 检测内存泄漏和其它错误. . . . . . . . . . . . . . . . . . . . . . . . . . . 333 15.3 构建自防御的程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 15.4 错误报告. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 15.5 提供运行期类型信息. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 15.5.1 提供运行期类型信息. . . . . . . . . . . . . . . . . . . . . . . . . 340 15.6 使用wxModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 15.7 加载动态链接库. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 15.8 异常处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 15.9 调试提示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 15.9.1 调试X11错误. . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 15.9.2 一个简单有效的定位问题方法. . . . . . . . . . . . . . . . . . . . . 345 15.9.3 调试一个发布版本. . . . . . . . . . . . . . . . . . . . . . . . . . 345 15.10 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 16 编写国际化程序347 16.1 国际化介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 16.2 从翻译说起. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 16.2.1 poEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 16.2.2 一步一步介绍创建消息翻译分类条目. . . . . . . . . . . . . . . . . . 348 16.2.3 使用wxLocale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 16.3 字符编码和Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 16.3.1 转换数据. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 16.3.2 wxCSConv (wxMBConv) . . . . . . . . . . . . . . . . . . . . . . . . 352 16.3.3 转化来自外部的临时缓存数据. . . . . . . . . . . . . . . . . . . . . 353 16.3.4 帮助文件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 16.4 数字和日期. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 16.5 其它媒介. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 16.6 一个小例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 16.7 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 17 编写多线程程序358 17.1 什么时候使用多线程,什么时候不要使用. . . . . . . . . . . . . . . . . . . . 358 17.2 使用wxThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 17.2.1 线程的创建. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 17.2.2 指定栈大小. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 17.2.3 指定优先级. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 17.2.4 启动线程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 17.2.5 怎样暂停线程以等待一个外部条件. . . . . . . . . . . . . . . . . . . 360 17.2.6 线程中止. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 17.3 用于线程同步的对象. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 17.3.1 wxMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 17.3.2 死锁. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 17.3.3 wxCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . 362 17.3.4 wxCondition . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 17.3.5 wxCondition使用举例. . . . . . . . . . . . . . . . . . . . . . . . 363 17.3.6 wxSemaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 17.4 wxWidgets的线程例子. . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 17.5 多线程的替代方案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 17.5.1 使用wxTimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 17.5.2 空闲时间处理. . . . . . . . . . . . . . . . . . . . . . . . . . . . 367 17.6 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 18 使用wxSocket编程370 18.1 Socket类和功能概览. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 18.2 Socket及其基本处理介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . 371 18.2.1 客户端的代码. . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 18.2.2 服务器端代码. . . . . . . . . . . . . . . . . . . . . . . . . . . 372 18.2.3 连接服务器. . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 18.2.4 Socket地址. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 18.2.5 Socket客户端. . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 18.2.6 Socket事件. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 18.2.7 Socket事件类型. . . . . . . . . . . . . . . . . . . . . . . . . . . 374 18.2.8 wxSocketEvent的主要成员函数. . . . . . . . . . . . . . . . . . . . 374 18.2.9 使用Socket事件. . . . . . . . . . . . . . . . . . . . . . . . . . . 374 18.2.10 Socket状态和错误提醒. . . . . . . . . . . . . . . . . . . . . . . . 375 18.2.11 发送和接收Socket数据. . . . . . . . . . . . . . . . . . . . . . . . 376 18.2.12 创建一个Server . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 18.2.13 处理新的连接请求事件. . . . . . . . . . . . . . . . . . . . . . . . 377 18.2.14 Socket事件概述. . . . . . . . . . . . . . . . . . . . . . . . . . . 377 18.3 Socket标记. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 18.3.1 wxWidget中的阻塞和非阻塞socket . . . . . . . . . . . . . . . . . . . 378 18.3.2 这些标记是怎样影响Socket的行为的. . . . . . . . . . . . . . . . . . 380 18.3.3 标准socket和wxSocket . . . . . . . . . . . . . . . . . . . . . . . . 380 18.4 使用Socket流. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 18.4.1 文件发送线程. . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 18.4.2 文件接收线程. . . . . . . . . . . . . . . . . . . . . . . . . . . 382 18.5 替代wxSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 18.6 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 19 使用文档/视图框架384 19.1 文档/视图基础. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 19.1.1 选择用户界面类型. . . . . . . . . . . . . . . . . . . . . . . . . . 385 19.1.2 创建和使用frame窗口类. . . . . . . . . . . . . . . . . . . . . . . . 386 19.1.3 定义你的文档和视图类. . . . . . . . . . . . . . . . . . . . . . . 387 19.1.4 定义你的窗口类. . . . . . . . . . . . . . . . . . . . . . . . . . . 395 19.1.5 使用wxDocManager和wxDocTemplate . . . . . . . . . . . . . . . . . . 396 19.2 文档/视图框架的其它能力. . . . . . . . . . . . . . . . . . . . . . . . . . 398 19.2.1 标准标识符. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 19.2.2 打印和打印预览. . . . . . . . . . . . . . . . . . . . . . . . . . . 398 19.2.3 文件访问历史. . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 19.2.4 显式创建文档类. . . . . . . . . . . . . . . . . . . . . . . . . . . 399 19.3 实现Undo/Redo的策略. . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 19.4 本章小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 20 完善你的应用程序402 20.1 单个实例和多个实例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 20.2 更改事件处理机制. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 20.3 降低闪烁. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 20.4 实现联机帮助. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 20.4.1 使用帮助控制器. . . . . . . . . . . . . . . . . . . . . . . . . . . 409 20.4.2 帮助文件中的声明. . . . . . . . . . . . . . . . . . . . . . . . . . 412 20.4.3 其它提供帮助的手段. . . . . . . . . . . . . . . . . . . . . . . . . 413 20.4.4 上下文敏感帮助和工具提示. . . . . . . . . . . . . . . . . . . . . . 414 20.4.5 菜单项提示. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 20.5 解析命令行参数. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 20.6 存储应用程序资源. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 20.6.1 减少数据文件的数量. . . . . . . . . . . . . . . . . . . . . . . . . 416 20.6.2 找到应用程序所在的位置. . . . . . . . . . . . . . . . . . . . . . . 417 20.7 调用别的应用程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 20.7.1 启动一个应用程序. . . . . . . . . . . . . . . . . . . . . . . . . . 418 20.7.2 打开文档. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 20.7.3 重定向进程的输入和输出. . . . . . . . . . . . . . . . . . . . . . . 419 20.8 管理应用程序设置. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 20.8.1 保存配置数据. . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 20.8.2 编辑选项. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 20.9 应用程序安装. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 20.9.1 在Windows系统上安装你的程序. . . . . . . . . . . . . . . . . . . . 424 20.9.2 在Linux系统上制作安装程序. . . . . . . . . . . . . . . . . . . . . 425 20.9.3 Linux环境上的动态链接库的问题. . . . . . . . . . . . . . . . . . . 426 20.9.4 在Mac OSX上安装程序. . . . . . . . . . . . . . . . . . . . . . . . 426 20.10 遵循用户界面设计规范. . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 20.10.1 标准按钮. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 20.10.2 菜单. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 20.10.3 图标. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 20.10.4 字体和颜色. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 20.10.5 应用程序中止时的行为. . . . . . . . . . . . . . . . . . . . . . . . 429 20.10.6 进一步阅读. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 20.11 全书小结. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.