This book is a guide to using wxWidgets, an open-source construction kit for writing sophisticated C++ applications targeting a variety of platforms, including Windows, Linux, Mac OS X, and Pocket PC. With help from this book, a competent programmer can create multi-platform applications with confidence. Developers already familiar with wxWidgets should also find it useful for brushing up their knowledge.
This book is accessible to developers with a variety of experience and backgrounds. You may come from a Windows or Unix perspective; you may previously have experience in MFC, OWL, Win32, Mac OS, Motif, or console-mode Unix programming. Or perhaps you have come from a different career entirely and are looking for a way to get up to speed on multiple platforms. The book can’t specifically cover the details of the C++ language, but it’s common for people to successfully learn C++ and wxWidgets at the same time, and the straightforward nature of the wxWidgets API makes this process easier. The reader does not need to know more advanced C++ techniques like templates, streams, and exceptions. However, wxWidgets does not prevent you from using these techniques.
Managers will find the book useful in discovering what wxWidgets can do for them, particularly in Chapter 1, “Introduction.” The combination of the book and the resources on the accompanying CD-ROM will give your staff all they need for getting started on cross-platform programming projects. You’ll see how wxWidgets puts tools of tremendous power into your hands, with benefits that include:
Cost savings from writing code once that will compile on Windows, Unix, Mac OS X, and other platforms.
Customer satisfaction from delivering stable, fast, attractive applications with a native look and feel.
Increased productivity from the wide variety of classes that wxWidgets provides, both for creating great GUIs and for general application development.
Increased market share due to support for platforms you may not have previously considered, and the ability to internationalize your applications.
Support from a large, active wxWidgets community that answers questions helpfully and provides prompt bug fixing. The sample of third-party add-ons listed in Appendix E, “Third-Party Tools for wxWidgets,” is evidence of a thriving ecosystem.
Access to the source for enhancement and trouble-shooting.
This is a guide to writing wxWidgets application with C++, but you can use a variety of other languages such as Python, Perl, a BASIC variant, Lua, Eiffel, JavaScript, Java, Ruby, Haskell, and C#. Some of these bindings are more advanced than others. For more information, please see Appendix E and the wxWidgets web site at http://www.wxwidgets.org
.
We focus on three popular desktop platforms: Microsoft Windows, Linux using GTK+, and Mac OS X. However, most of the book also applies to other platforms supported by wxWidgets. In particular, wxWidgets can be used with most Unix variants.
The CD-ROM contains example code from the book, the wxWidgets 2.6 distribution for Windows, Linux, Mac OS X, and other platforms, and several tools to help you use wxWidgets, including the translation tool poEdit. For Windows users, we supply three free compilers you can use with wxWidgets: MinGW, Digital Mars C++, and OpenWatcom C++.
In addition, we provide you with DialogBlocks Personal Edition, a sophisticated rapid application development (RAD) tool for you to create complex windows with very little manual coding. You can use it to compile and run samples that accompany the book as well as to create your own applications for personal use, and it also provides convenient access to the wxWidgets reference manual.
Updates to the book and CD-ROM can be obtained from this site:
It’s advisable to read at least Chapters 1 through 10 in order, but you can skip to other chapters if you need to complete a particular task. If you haven’t installed wxWidgets before, you may want to look at Appendix A, “Installing wxWidgets,” early on. MFC programmers will find it useful to read Appendix K, “Porting from MFC,” as a point of reference.
Because this book is not a complete API reference, you’ll find it useful to keep the wxWidgets reference manual open. The reference manual is available in a number of formats, including Windows HTML Help and PDF, and it should be in your wxWidgets distribution; if not, it can be downloaded from the wxWidgets web site. You can also refer to the many samples in the wxWidgets distribution to supplement the examples given in this book.
Note that the book is intended to be used in conjunction with wxWidgets 2.6 or later. The majority of the book will apply to earlier versions, but be aware that some functionality will be missing, and in a small number of cases, the behavior may be different. In particular, sizer behavior changed somewhat between 2.4 and 2.5. For details, please see the topic “Changes Since 2.4.x” in the wxWidgets reference manual.
For code examples, we mostly follow the wxWidgets style guidelines, for example:
Words within class names and functions have an initial capital, for example MyFunkyClass
.
The m_
prefix denotes a member variable, s_
denotes a static variable, g_
denotes a global variable; local variables generally start with a lowercase letter, for example textCtrl
.
You can find more about the wxWidgets style guidelines at http://www.wxwidgets.org/standard.htm
.
Sometimes we’ll also use comments that can be parsed by the documentation tool Doxygen, such as:
/*! A class description
*/
/// A function description
Classes, functions, identifiers, variables, and standard wxWidgets objects are marked with a teletype font
in the text. User interface commands, such as menu and button labels, are marked in italics.
What is wxWidgets, and why use it? A brief history; the wxWidgets community; the license; wxWidgets ports and architecture explained.
A small wxWidgets sample: the application class; the main window; the event table; an outline of program flow.
Event tables and handlers; how a button click is processed; skipping events; pluggable and dynamic event handlers; defining custom events; window identifiers.
The main features of a window explained; a quick guide to the commonest window classes; base window classes such as wxWindow
; top-level windows; container windows; non-static controls; static controls; menus; control bars.
Device context principles; the main device context classes described; buffered drawing; drawing tools; device context drawing functions; using the printing framework; 3D graphics with wxGLCanvas
.
Handling mouse and mouse wheel events; handling keyboard events; keycodes; modifier key variations; accelerators; handling joystick events.
Layout basics; sizers introduced; common features of sizers; programming with sizers. Further layout issues: dialog units; platform-adaptive layouts; dynamic layouts.
Informative dialogs such as wxMessageBox
and wxProgressDialog
; file and directory dialogs such as wxFileDialog
; choice and selection dialogs such as wxColourDialog
and wxFontDialog
; entry dialogs such as wxTextEntryDialog
and wxFindReplaceDialog
; printing dialogs: wxPageSetupDialog
and wxPrintDialog
.
Steps in creating a custom dialog; an example: PersonalRecordDialog
; deriving a new class; designing data storage; coding the controls and layout; data transfer and validation; handling events; handling UI updates; adding help; adapting dialogs for small devices; further considerations in dialog design; using wxWidgets resource files; loading resources; using binary and embedded resource files; translating resources; the XRC format; writing resource handlers; foreign controls.
Image classes in wxWidgets; programming with wxBitmap
; programming with wxIcon
; programming with wxCursor
; programming with wxImage
; image lists and icon bundles; customizing wxWidgets graphics with wxArtProvider
.
Data objects; data source duties; data target duties; using the clipboard; implementing drag and drop; implementing a drag source; implementing a drop target; using standard drop targets; creating a custom drop target; more on wxDataObject
; drag and drop helpers in wxWidgets.
wxTreeCtrl
; wxListCtrl
; wxWizard
; wxHtmlWindow
; wxGrid
; wxTaskBarIcon
; writing your own controls; the control declaration; defining a new event class; displaying information; handling input; defining default event handlers; implementing validators; implementing resource handlers; determining control appearance.
Why not STL? wxString
; wxStringTokenizer
; wxRegEx
; wxArray
; wxList
; wxHashMap
; wxDateTime
; wxObject
; wxLongLong
; wxPoint
and wxRealPoint
; wxRect
; wxRegion
; wxSize
; wxVariant
.
wxFile
and wxFFile
; wxTextFile
; wxTempFile
; wxDir
; wxFileName
; file functions; file streams; memory and string streams; data streams; socket streams; filter streams; zip streams; virtual file systems.
Creating and deleting window objects; creating and copying drawing objects; initializing your application object; cleaning up your application; detecting memory leaks and other errors; facilities for defensive programming; error reporting; providing run-time type information; using wxModule
; loading dynamic libraries; exception handling; debugging tips.
Introduction to internationalization; providing translations; using message catalogs; using wxLocale
; character encodings and Unicode; converting data; help files; numbers and dates; other media; an example.
When to use threads, and when not to; using wxThread
; thread creation; starting the thread; how to pause a thread or wait for an external condition; termination; synchronization objects; wxMutex
; deadlocks; wxCriticalSection
; wxCondition
; wxSemaphore
; the wxWidgets thread sample; alternatives to multithreading: wxTimer
, idle time processing, and yielding.
Socket classes and functionality overview; introduction to sockets and basic socket processing; connecting to a server; socket events; socket status and error notifications; sending and receiving socket data; creating a server; socket event recap; socket flags; blocking and non-blocking sockets in wxWidgets; how flags affect socket behavior; using wxSocket
as a standard socket; using socket streams; alternatives to wxSocket
.
Document/view basics; choosing an interface style; creating and using frame classes; defining your document and view classes; defining your window classes; using wxDocManager
and wxDocTemplate
; other document/view capabilities; standard identifiers; printing and previewing; file history; explicit document creation; strategies for implementing undo/redo.
Single instance versus multiple instances; modifying event handling; reducing flicker; using a help controller; extended wxWidgets HTML help; authoring help; other ways to provide help; parsing the command line; storing application resources; invoking other applications; launching documents; redirecting process input and output; managing application settings; application installation on Windows, Linux and Mac OS X; following UI design guidelines.
Downloading and unpacking wxWidgets; configuration/build options; Windows—Microsoft Visual Studio and VC++ command-line; Windows—Borland C++; Windows—MinGW with and without MSYS; Unix/Linux and Mac OS X—GCC; customizing setup.h
; rebuilding after updating wxWidgets files; using contrib
libraries.
Windows—Microsoft Visual Studio; Linux—KDevelop; Mac OS X—Xcode; makefiles; cross-platform builds using Bakefile; wxWidgets symbols and headers; using wx-config
.
What is DialogBlocks? Installing and upgrading DialogBlocks; the DialogBlocks interface; the sample project; compiling the sample; creating a new project; creating a dialog; creating a frame; creating an application object; debugging your application.
Further window classes; ODBC classes; MIME types manager; network functionality; multimedia classes; embedded web browsers; accessibility; OLE automation; renderer classes; event loops.
Language bindings such as wxPython and wxPerl; tools such as wxDesigner, DialogBlocks and poEdit; add-on libraries such as wxMozilla, wxCURL, wxPropertyGrid.
Descriptions of notable wxWidgets applications, such as AOL Communicator and Audacity.
An illustrated description of how event processing works.
18.117.187.62