在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例桌面应用界面/GUI → Cross-Platform GUI Programming with wxWidgets

Cross-Platform GUI Programming with wxWidgets

桌面应用界面/GUI

下载此实例
  • 开发语言:C/C++
  • 实例大小:4.70M
  • 下载次数:5
  • 浏览次数:34
  • 发布时间:2022-12-25
  • 实例类别:桌面应用界面/GUI
  • 发 布 人:tjmxf
  • 文件格式:.pdf
  • 所需积分:2

实例介绍

【实例简介】Cross-Platform GUI Programming with wxWidgets

【实例截图】

【核心代码】

Contents
vii
The Frame Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
The Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18
The Frame Constructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
The Whole Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Compiling and Running the Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22
Program Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
3 Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
Event-Driven Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
Event Tables and Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
Skipping Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Pluggable Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29
Dynamic Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
Window Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Defining Custom Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
4 Window Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
Anatomy of a Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
The Concept of a Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Client and Non-Client Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
Scrollbars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Caret and Cursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Top-Level Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Coordinate System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Painting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
Color and Font . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Window Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Sizing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Idle Time Processing and UI Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
Window Creation and Deletion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43
Window Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
A Quick Guide to the Window Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44
Base Window Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Top-Level Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Container Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Non-Static Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
Static Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Control Bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
Base Window Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
wxWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
wxWindow Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
wxWindow Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
viii Contents
wxWindow Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
wxControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
wxControlWithItems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
wxControlWithItems Member Functions . . . . . . . . . . . . . . . . . . . . . . . . .54
Top-Level Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
wxFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .55
wxFrame Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
wxFrame Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
wxFrame Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
Non-Rectangular Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .61
Mini-Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
wxMDIParentFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
wxMDIParentFrame Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
wxMDIParentFrame Member Functions . . . . . . . . . . . . . . . . . . . . . . . . .65
wxMDIChildFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
wxMDIChildFrame Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65
wxMDIChildFrame Member Functions . . . . . . . . . . . . . . . . . . . . . . . . .66
wxDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
wxDialog Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
wxDialog Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .70
wxDialog Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
wxPopupWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
Container Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
wxPanel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
wxPanel Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
wxPanel Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
wxNotebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
Notebook Theme Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
wxNotebook Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
wxNotebook Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
wxNotebook Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .75
Alternatives to wxNotebook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
wxScrolledWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
wxScrolledWindow Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
wxScrolledWindow Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .78
wxScrolledWindow Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . .79
Scrolling Without Using wxScrolledWindow . . . . . . . . . . . . . . . . . . . . .80
wxSplitterWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
wxSplitterWindow Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
wxSplitterWindow Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
wxSplitterWindow Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . .84
Sizing Issues with wxSplitterWindow . . . . . . . . . . . . . . . . . . . . . . . . . . .84
Alternatives to wxSplitterWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
Non-Static Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
wxButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Contents ix
wxButton Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
wxButton Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
wxButton Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
wxButton Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
wxBitmapButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .89
wxBitmapButton Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
wxBitmapButton Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
wxBitmapButton Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . .90
wxChoice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .90
wxChoice Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
wxChoice Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
wxChoice Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
wxComboBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
wxComboBox Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .92
wxComboBox Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
wxComboBox Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
wxCheckBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .93
wxCheckBox Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .94
wxCheckBox Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
wxCheckBox Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
wxListBox and wxCheckListBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95
wxListBox and wxCheckListBox Styles . . . . . . . . . . . . . . . . . . . . . . . . . .97
wxListBox and wxCheckListBox Events . . . . . . . . . . . . . . . . . . . . . . . . .97
wxListBox Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
wxCheckListBox Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
wxRadioBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .98
wxRadioBox Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .99
wxRadioBox Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
wxRadioBox Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
wxRadioButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .100
wxRadioButton Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
wxRadioButton Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
wxRadioButton Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
wxScrollBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
wxScrollBar Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
wxScrollBar Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .102
wxScrollBar Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
wxSpinButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
wxSpinButton Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
wxSpinButton Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
wxSpinButton Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
wxSpinCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
wxSpinCtrl Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
wxSpinCtrl Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
wxSpinCtrl Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
wxSlider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
x Contents
wxSlider Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
wxSlider Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
wxSlider Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
wxTextCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
wxTextCtrl Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
wxTextCtrl Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
wxTextCtrl Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
wxToggleButton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .111
wxToggleButton Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
wxToggleButton Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
wxToggleButton Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . .112
Static Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
wxGauge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
wxGauge Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
wxGauge Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
wxGauge Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
wxStaticText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
wxStaticText Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
wxStaticText Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
wxStaticBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
wxStaticBitmap Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
wxStaticBitmap Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . .115
wxStaticLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
wxStaticLine Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
wxStaticLine Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
wxStaticBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
wxStaticBox Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
wxStaticBox Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
wxMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117
wxMenu Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
wxMenu Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .120
Control Bars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
wxMenuBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
wxMenuBar Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
wxMenuBar Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
wxMenuBar Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
wxToolBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124
Tool Bitmap Colors Under Windows . . . . . . . . . . . . . . . . . . . . . . . . . . .125
wxToolBar Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
wxToolBar Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .126
wxToolBar Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .127
wxStatusBar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .128
wxStatusBar Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
wxStatusBar Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
wxStatusBar Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
Contents xi
xii Contents
5 Drawing and Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31
Understanding Device Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131
Available Device Contexts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132
Drawing on Windows with wxClientDC . . . . . . . . . . . . . . . . . . . . . . . . . . .133
Erasing Window Backgrounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
Drawing on Windows with wxPaintDC . . . . . . . . . . . . . . . . . . . . . . . . . . .135
Drawing on Bitmaps with wxMemoryDC . . . . . . . . . . . . . . . . . . . . . . . . .138
Creating Metafiles with wxMetafileDC . . . . . . . . . . . . . . . . . . . . . . . . . . .138
Accessing the Screen with wxScreenDC . . . . . . . . . . . . . . . . . . . . . . . . . .139
Printing with wxPrinterDC and wxPostScriptDC . . . . . . . . . . . . . . . . . . .139
Drawing Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
wxColour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141
wxPen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
wxBrush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
wxFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .145
wxPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
Device Context Drawing Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148
Drawing Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
Drawing Lines and Shapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .152
Drawing Splines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .156
Drawing Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
Filling Arbitrary Areas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
Logical Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .159
Using the Printing Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
More on wxPrintout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
Scaling for Printing and Previewing . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
Printing under Unix with GTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
3D Graphics with wxGLCanvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .170
6 Handling Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
Mouse Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171
Handling Button and Motion Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
Handling Mouse Wheel Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174
Handling Keyboard Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
An Example Character Event Handler . . . . . . . . . . . . . . . . . . . . . . . . . . .178
Key Code Translation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Modifier Key Variations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179
Accelerators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .180
Handling Joystick Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
wxJoystick Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183
wxJoystickEvent Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
wxJoystick Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .184
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .185
7 Window Layout Using Sizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
Layout Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .187
Sizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .188
Common Features of Sizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .190
Programming with Sizers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192
Programming with wxBoxSizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
Programming with wxStaticBoxSizer . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
Programming with wxGridSizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
Programming with wxFlexGridSizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198
Programming with wxGridBagSizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200
Further Layout Issues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
Dialog Units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Platform-Adaptive Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
Dynamic Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
8 Using Standard Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
Informative Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
wxMessageDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205
wxMessageDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207
wxMessageBox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207
wxProgressDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .208
wxProgressDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .209
wxBusyInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
wxBusyInfo Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
wxShowTip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
wxShowTip Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .211
File and Directory Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
wxFileDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .212
wxFileDialog Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
wxFileDialog Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
wxFileDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
wxDirDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216
wxDirDialog Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
wxDirDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
Choice and Selection Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
wxColourDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .218
wxColourData Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
wxColourDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
wxFontDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
wxFontData Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223
Font Selector Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
wxSingleChoiceDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .224
wxSingleChoiceDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
Contents xiii
wxMultiChoiceDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
wxMultiChoiceDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
Entry Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
wxNumberEntryDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
wxNumberEntryDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
wxTextEntryDialog and wxPasswordEntryDialog . . . . . . . . . . . . . . . . . . .227
wxTextEntryDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
wxFindReplaceDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .228
Handling Events from the Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
wxFindDialogEvent Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230
Passing Data to the Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230
wxFindReplaceData Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230
Find and Replace Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231
Printing Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232
wxPageSetupDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232
wxPageSetupData Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
wxPageSetupDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
wxPrintDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235
wxPrintDialogData Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
wxPrintDialog Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
9 Writing Custom Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
Steps in Creating a Custom Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
An Example: PersonalRecordDialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
Deriving a New Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
Designing Data Storage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
Coding the Controls and Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .244
Data Transfer and Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247
Handling Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249
Handling UI Updates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250
Adding Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
Tooltips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
Context-Sensitive Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252
The Complete Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Invoking the Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
Adapting Dialogs for Small Devices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254
Further Considerations in Dialog Design . . . . . . . . . . . . . . . . . . . . . . . . . . .255
Keyboard Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255
Data and UI Separation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
Layout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .256
Aesthetics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
Alternatives to Dialogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
xiv Contents
Contents xv
Using wxWidgets Resource Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
Loading Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
Using Binary and Embedded Resource Files . . . . . . . . . . . . . . . . . . . . . .259
Translating Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
The XRC Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261
Writing Resource Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
Foreign Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .263
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
10 Programming with Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
Image Classes in wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .265
Programming with wxBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
Creating a wxBitmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .268
Setting a wxMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269
The XPM Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
Drawing with Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
Packaging Bitmap Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272
Programming with wxIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .272
Creating a wxIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .273
Using wxIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274
Associating an Icon with an Application . . . . . . . . . . . . . . . . . . . . . . . . . .274
Programming with wxCursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275
Creating a wxCursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .276
Using wxCursor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
Using wxSetCursorEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
Programming with wxImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
Loading and Saving Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280
Transparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
Transformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
Color Reduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
Manipulating wxImage Data Directly . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
Image Lists and Icon Bundles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .285
Customizing Art in wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .290
11 Clipboard and Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291
Data Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .291
Data Source Duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292
Data Target Duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292
Using the Clipboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293
Implementing Drag and Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
Implementing a Drag Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .294
1. Preparation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
2. Drag Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
3. Dragging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
4. Processing the Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .296
Implementing a Drop Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
1. Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
2. Dragging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
3. Drop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
Using Standard Drop Targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .298
Creating a Custom Drop Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .299
More on wxDataObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300
Deriving from wxDataObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .301
The wxWidgets Drag and Drop Sample . . . . . . . . . . . . . . . . . . . . . . . .302
Drag and Drop Helpers in wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . .311
wxTreeCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .311
wxListCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
wxDragImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .313
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316
12 Advanced Window Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317
wxTreeCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317
wxTreeCtrl Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .319
wxTreeCtrl Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .320
wxTreeCtrl Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321
wxListCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322
wxListCtrl Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .323
wxListCtrl Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324
wxListItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .325
wxListCtrl Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .327
Using wxListCtrl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329
Virtual List Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
wxWizard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
wxWizard Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
wxWizard Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332
wxWizard Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .332
wxHtmlWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .338
wxHtmlWindow Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .341
wxHtmlWindow Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342
Embedding Windows in HTML Pages . . . . . . . . . . . . . . . . . . . . . . . . . . . .343
HTML Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344
wxGrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346
The wxGrid System of Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
wxGrid Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .349
wxGrid Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .350
Functions for Creation, Deletion, and Data Retrieval . . . . . . . . . . . . .350
Presentation Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .351
Functions for Setting and Getting wxGrid Metrics . . . . . . . . . . . . . . .352
xvi Contents
Contents xvii
Selection and Cursor Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352
Miscellaneous wxGrid Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
wxTaskBarIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .354
wxTaskBarIcon Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358
wxTaskBarIcon Member Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358
Writing Your Own Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
The Custom Control Declaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360
Adding DoGetBestSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362
Defining a New Event Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .363
Displaying Information on the Control . . . . . . . . . . . . . . . . . . . . . . . . . . .363
Handling Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
Defining Default Event Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .364
Implementing Validators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
Implementing Resource Handlers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367
Determining Control Appearance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .367
A More Complex Example: wxThumbnailCtrl . . . . . . . . . . . . . . . . . . . . . .369
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371
13 Data Structure Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373
Why Not STL? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .373
Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374
Using wxString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374
wxString, Characters, and String Literals . . . . . . . . . . . . . . . . . . . . . . . . .375
Basic wxString to C Pointer Conversions . . . . . . . . . . . . . . . . . . . . . . . . .375
Standard C String Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .376
Converting to and from Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .377
wxStringTokenizer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378
wxRegEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379
wxArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379
Array Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .379
wxArrayString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .380
Array Construction, Destruction, and Memory Management . . . . . . . . .381
Array Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .381
wxList and wxNode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .383
wxHashMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .385
Storing and Processing Dates and Times . . . . . . . . . . . . . . . . . . . . . . . . . . . .387
wxDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .388
wxDateTime Constructors and Modifiers . . . . . . . . . . . . . . . . . . . . . . . . .388
wxDateTime Accessors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .388
Getting the Current Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .389
Parsing and Formatting Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .389
Date Comparisons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .389
Date Arithmetic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .389
Helper Data Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391
wxObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .391
wxLongLong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
wxPoint and wxRealPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
wxRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .392
wxRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393
wxSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394
wxVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .394
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .395
14 Files and Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397
File Classes and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397
wxFile and wxFFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .397
wxTextFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .399
wxTempFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400
wxDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .400
wxFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .401
File Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .402
Stream Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .403
File Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .403
Memory and String Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405
Reading and Writing Data Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405
Socket Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .406
Filter Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407
Zip Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407
Virtual File Systems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .408
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .411
15 Memory Management, Debugging, and Error Checking . . . . . . . . . .413
Memory Management Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413
Creating and Deleting Window Objects . . . . . . . . . . . . . . . . . . . . . . . . . . .413
Creating and Copying Drawing Objects . . . . . . . . . . . . . . . . . . . . . . . . . .415
Initializing Your Application Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .415
Cleaning Up Your Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416
Detecting Memory Leaks and Other Errors . . . . . . . . . . . . . . . . . . . . . . . . .416
Facilities for Defensive Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .418
Error Reporting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .419
wxMessageOutput Versus wxLog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423
Providing Run-Time Type Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . .424
Using wxModule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426
Loading Dynamic Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .427
Exception Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .428
Debugging Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .429
Debugging X11 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .429
Simplify the Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430
Debugging a Release Build . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .430
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .431
xviii Contents
16 Writing International Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . .433
Introduction to Internationalization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .433
Providing Translations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434
poEdit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434
Step-by-Step Guide to Using Message Catalogs . . . . . . . . . . . . . . . . . . . .435
Using wxLocale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .437
Character Encodings and Unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .438
Converting Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .439
wxEncodingConverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .440
wxCSConv (wxMBConv) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .440
Converting Outside of a Temporary Buffer . . . . . . . . . . . . . . . . . . . . . . . .441
Help Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .442
Numbers and Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .443
Other Media . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .443
A Simple Sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .444
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .446
17 Writing Multithreaded Applications . . . . . . . . . . . . . . . . . . . . . . . . . . .447
When to Use Threads, and When Not To . . . . . . . . . . . . . . . . . . . . . . . . . . . .447
Using wxThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .448
Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .449
Specifying Stack Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .450
Specifying Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .450
Starting the Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .450
How to Pause a Thread or Wait for an External Condition . . . . . . . . . . .450
Termination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451
Synchronization Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451
wxMutex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .451
Deadlocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .452
wxCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453
wxCondition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453
wxCondition Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .453
wxSemaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456
The wxWidgets Thread Sample . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .456
Alternatives to Multithreading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457
Using wxTimer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .457
Idle Time Processing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .459
Yielding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .460
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .460
18 Programming with wxSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .463
Socket Classes and Functionality Overview . . . . . . . . . . . . . . . . . . . . . . . . .464
Introduction to Sockets and Basic Socket Processing . . . . . . . . . . . . . . . . . .464
The Client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .465
The Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .466
Contents xix
xx Contents
Connecting to a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .467
Socket Addresses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .468
Socket Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .468
Socket Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .469
Socket Event Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .469
wxSocketEvent Major Member Functions . . . . . . . . . . . . . . . . . . . . . . .469
Using Socket Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .470
Socket Status and Error Notifications . . . . . . . . . . . . . . . . . . . . . . . . . . . .470
Sending and Receiving Socket Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .471
Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .471
Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472
Creating a Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .472
wxSocketServer Major Member Functions . . . . . . . . . . . . . . . . . . . . . .472
Handling a New Connection Event . . . . . . . . . . . . . . . . . . . . . . . . . . . .472
Socket Event Recap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .473
Socket Flags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .473
Blocking and Non-Blocking Sockets in wxWidgets . . . . . . . . . . . . . . . . . .474
The Impossible Socket Combination . . . . . . . . . . . . . . . . . . . . . . . . . . .475
How Flags Affect Socket Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .475
Using wxSocket as a Standard Socket . . . . . . . . . . . . . . . . . . . . . . . . . . . .476
Using Socket Streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .476
File Sending Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .477
File Receiving Thread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .478
Alternatives to wxSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .479
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .480
19 Working with Documents and Views . . . . . . . . . . . . . . . . . . . . . . . . . . .481
Document/View Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .481
Step 1: Choose an Interface Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .483
Step 2: Create and Use Frame Classes . . . . . . . . . . . . . . . . . . . . . . . . . . .483
Step 3: Define Your Document and View Classes . . . . . . . . . . . . . . . . . . .486
Step 4: Define Your Window Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . .495
Step 5: Use wxDocManager and wxDocTemplate . . . . . . . . . . . . . . . . . . .497
Other Document/View Capabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .500
Standard Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .500
Printing and Previewing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .500
File History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .500
Explicit Document Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .501
Strategies for Implementing Undo/Redo . . . . . . . . . . . . . . . . . . . . . . . . . . . .501
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
20 Perfecting Your Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .505
Single Instance or Multiple Instances? . . . . . . . . . . . . . . . . . . . . . . . . . . . . .506
Modifying Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .510
Reducing Flicker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .512
Contents xxi
Implementing Online Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .513
Using a Help Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .515
Extended wxWidgets HTML Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .517
Authoring Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .518
Other Ways to Provide Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .519
Context-Sensitive Help and Tooltips . . . . . . . . . . . . . . . . . . . . . . . . . . . . .520
Menu Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .521
Parsing the Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .521
Storing Application Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .523
Reducing the Number of Data Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .523
Finding the Application Path . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .524
Invoking Other Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .525
Running an Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .525
Launching Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .525
Redirecting Process Input and Output . . . . . . . . . . . . . . . . . . . . . . . . . . .527
Managing Application Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .529
Storing Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .530
Editing Settings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .531
Application Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .532
Installation on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .532
Installation on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .534
Shared Library Issues on Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .535
Installation on Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .535
Following UI Design Guidelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .538
Standard Buttons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .538
Menus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .538
Icons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
Fonts and Colors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
Application Termination Behavior . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
Further Reading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540
A Installing wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543
B Building Your Own wxWidgets Applications . . . . . . . . . . . . . . . . . . . . .559
C Creating Applications with DialogBlocks . . . . . . . . . . . . . . . . . . . . . . . .575
D Other Features in wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .585
E Third-Party Tools for wxWidgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .593
F wxWidgets Application Showcase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .601
G Using the CD-ROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .611
xxii Contents
H How wxWidgets Processes Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .613
I Event Classes and Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .617
J Code Listings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .627
K Porting from MFC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643
Glossary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .657
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .663

实例下载地址

Cross-Platform GUI Programming with wxWidgets

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警