Cross-Platform GUI Programming with wxWidgets
Read an excerpt:
Chapter 5: Drawing and Printing
Excerpt provided courtesy of Prentice-Hall PTR. Copyright © Prentice-Hall PTR. Written permission from the publisher is required for any use of this material.
|
Be the First to Write a Review and tell the world about this title!People who purchase this book frequently purchase: - A Practical Guide to Linux Commands, Editors, and Shell Programming; Mark G. Sobell, $27.25, 45% Off!
- Python Cookbook, 2nd Edition; Alex Martelli, et al, $31.50, 37% Off!
- The ACE Programmer's Guide: Practical Design Patterns for Network and Systems Programming; Stephen D. Huston, et al, $41.95, 30% Off!
- Linux Quick Fix Notebook; Peter Harrison, $21.95, 45% Off!
Books on similar topics, in best-seller order:Books from the same publisher, in best-seller order:
The authoritative guide to developing cross-platform C++ GUI applications using
the hot wxWidgets toolkit -- from its creator
- As Mac OS X and Linux gain share, wxWidgets is emerging as the best crossplatform
GUI toolkit
- Better than MFC, the creator of wxWidgets shows readers how to build C++
applications that support Windows, Linux and Mac OS X
- Prior GUI programming experience is not required
- Foreword from Mitch Kapor (founder of Lotus Development, OSAF), incredible
support from wxWidgets community
Preface
WHO THIS BOOK IS FOR
This book is a guide to using wxWidgets: an open-source construction kit to
help you write sophisticated C++ applications for 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 it 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. 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 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
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 two free compilers you can use with wxWidgets: MinGW and Digital Mars
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 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:
http://www.wxwidgets.org/book
HOW TO USE THIS BOOK
It's advisable to read at least Chapters 1 through 10 in order, but otherwise
you'll probably read the chapters you need to complete a particular task. If
you haven't installed wxWidgets before, you may wish 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 is either in
your wxWidgets distribution or 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.
Conventions
*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
start with a lower case letter, for example textCtrl.
You can find more about the wxWidgets style guidelines here:
http://www.wxwidgets.org/standard.htm
Sometimes we'll also use comments that can be parsed by the documentation tool
Doxygen, such as:
/// A function description
Classes, functions, identifiers and standard wxWidgets objects are marked with
a teletype font in the text, and variables are italicised. User interface commands,
such as menu and button labels, are also italicised.
Chapter summary
Chapter 1: Introduction
What is wxWidgets, and why use it? A brief history; the wxWidgets community;
the license; wxWidgets ports and architecture explained.
Chapter 2: Getting started
A small wxWidgets sample: the application class; the main window; the event
table; an outline of program flow.
Chapter 3: Event handling
Event tables and handlers; how a button click is processed; skipping events;
pluggable and dynamic event handlers; defining custom events; window identifiers.
Chapter 4: Window basics
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.
Chapter 5: Drawing and printing
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.
Chapter 6: Handling input
Handling mouse and mouse wheel events; handling keyboard events; keycodes;
modifier key variations; accelerators; handling joystick events.
Chapter 7: Window layout using sizers
Layout basics; sizers introduced; common features of sizers; programming with
sizers. Further layout issues: dialog units; platform-adaptive layouts; dynamic
layouts.
Chapter 8: Using standard dialogs
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.
Chapter 9: Creating custom dialogs
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.
Chapter 10: Programming with images
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.
Chapter 11: Clipboard and drag and drop
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.
Chapter 12: Advanced window classes
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.
Chapter 13: Data structure classes
Why not STL? wxString; wxStringTokenizer; wxRegEx; wxArray; wxList; wxHashMap;
dates and times; wxObject; wxLongLong; wxPoint and wxRealPoint; wxRect; wxRegion;
wxSize; wxVariant.
Chapter 14: Files and streams
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.
Chapter 15: Memory management, debugging and error checking
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.
Chapter 16: Writing international applications
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.
Chapter 17: Writing multithreaded applications
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.
Chapter 18: Programming with wxSocket
Socket classes and functionality overview; introduction to sockets and basic
socket processing; the client; the server; 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.
Chapter 19: Working with documents and views
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.
Chapter 20: Perfecting your application
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.
Appendix A: Installing wxWidgets
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.
Appendix B: Building your own wxWidgets applications
Windows Microsoft Visual Studio; Linux KDevelop; Mac OS X
Xcode; makefiles; cross-platform builds using Bakefile; wxWidgets symbols and
headers; using wx-config.
Appendix C: Creating applications with DialogBlocks
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.
Appendix D: Other features in wxWidgets
Further window classes; ODBC classes; MIME types manager; network functionality;
multimedia classes; embedded web browsers; accessibility; OLE automation; renderer
classes; event loops.
Appendix E: Third-party tools for wxWidgets
Language bindings such as wxPython and wxPerl; tools such as wxDesigner, DialogBlocks
and poEdit; add-on libraries such as wxMozilla, wxCURL, wxPropertyGrid.
Appendix F: wxWidgets application showcase
Descriptions of notable wxWidgets applications, such as AOL Communicator and
Audacity.
Appendix G: Using the CD-ROM
Browsing the CD-ROM; the CD-ROM contents.
Appendix H: How wxWidgets processes events
An illustrated description of how event processing works.
Appendix I: Event classes and macros
A summary of the important event classes and macros.
Appendix J: Code Listings
Code listings for the PersonalRecordDialog and the wxWizard examples.
Appendix K: Porting from MFC
General observations; application initialization; message maps; converting
dialogs and other resources; documents and views; printing; string handling
and translation; database access; configurable control bars; equivalent functionality
by macros and classes.
ABOUT THE AUTHORS
Julian Smart
Julian has degrees from the University of St Andrews and the University of
Dundee. After working on model-based reasoning at the Scottish Crop Research
Institute, he moved to the Artificial Intelligence Applications Institute at
the University of Edinburgh, where he founded the wxWidgets project in 1992.
Since starting Anthemion Software in 1996, Julian has been helping other companies
deploy wxWidgets, and sells tools for programmers, including DialogBlocks and
HelpBlocks. He has worked as a consultant for various companies including Borland,
and was a member of Red Hat's eCos team writing GUI tools to support the embedded
operating system. In 2004, Julian and his wife Harriet launched a consumer product
for fiction writers called Writer's Café, written with wxWidgets. Julian
and Harriet live in Edinburgh with their daughter Toni.
Kevin Hock
Kevin has degrees from Miami University (Oxford, Ohio) in Computer Science
and Accounting, and has taught courses at Miami in both Java and client-server
Systems. In 2002 he started work on an instant messaging system and founded
BitWise Communications LLC in 2003, offering both professional and personal
instant messaging. During the course of developing BitWise using wxWidgets,
Kevin became a wxWidgets developer and has provided enhancements to all platforms.
Stefan Csomor
Stefan is director and owner of Advanced Concepts AG, a company that specializes
in cross-platform development and consulting. In addition to being a qualified
medical doctor, he has more than fifteen years experience in object-oriented
programming and has been writing software for twenty-five years. Stefan is the
main author of the Mac OS port of wxWidgets.
Table of Contents
Foreword by Mitch Kapor.
Preface.
1. Introduction.
2. Getting Started.
3. Event Handling.
4. Window Basics.
5. Drawing and Printing.
6. Handling Input.
7. Window Layout Using Sizers.
8. Using Standard Dialogs.
9. Creating Custom Dialogs.
10. Programming with Images.
11. Clipboard and Drag and Drop.
12. Advanced Window Classes.
13. Data Structure Classes.
14. Files and Streams.
15. Memory Management, Debugging, and Error Checking.
16. Writing International Applications.
17. Writing Multithreaded Applications.
18. Programming with wxSocket.
19. Working with Documents and Views.
20. Perfecting Your Application.
Appendix A. Installing wxWidgets.
Appendix B. Building Your Own wxWidgets Applications.
Appendix C. Creating Applications with DialogBlocks.
Appendix D. Other Features in wxWidgets.
Appendix E. Third-Party Tools for wxWidgets.
Appendix F. wxWidgets Application Showcase.
Appendix G. Using the CD-ROM.
Appendix H. How wxWidgets Processes Events.
Appendix I. Event Classes and Macros.
Appendix J. Code Listings.
Appendix K. Porting from MFC.
Glossary.
Index.
|