Foreword by Mitch Kapor. Preface. Acknowledgments. About the Authors. 1. Introduction. What Is wxWidgets? Why Use wxWidgets? A Brief History of wxWidgets The wxWidgets Community wxWidgets and Object-Oriented Programming License Considerations The wxWidgets Architecture wxMSW wxGTK wxX11 wxMotif wxMac wxCocoa wxWinCE wxPalmOS wxOS2 wxMGL Internal Organization Summary 2. Getting Started. A Small wxWidgets Sample The Application Class The Frame Class The Event Handlers The Frame Constructor The Whole Program Compiling and Running the Program Program Flow Summary 3. Event Handling. Event-Driven Programming Event Tables and Handlers Skipping Events Pluggable Event Handlers Dynamic Event Handlers Window Identifiers Defining Custom Events Summary 4. Window Basics. Anatomy of a Window The Concept of a Window Client and Non-Client Areas Scrollbars Caret and Cursor Top-Level Windows Coordinate System Painting Color and Font Window Variant Sizing Input Idle Time Processing and UI Updates Window Creation and Deletion Window Styles A Quick Guide to the Window Classes Base Window Classes Top-Level Windows Container Windows Non-Static Controls Static Controls Menus Control Bars Base Window Classes wxWindow wxControl Top-Level Windows wxFrame wxMDIParentFrame wxMDIChildFrame wxDialog wxPopupWindow Container Windows wxPanel wxNotebook wxScrolledWindow wxSplitterWindow Non-Static Controls wxButton wxButton Labels wxBitmapButton wxChoice wxComboBox wxCheckBox wxListBox and wxCheckListBox wxRadioBox wxRadioButton wxScrollBar wxSpinButton wxSpinCtrl wxSlider wxTextCtrl wxToggleButton Static Controls wxGauge wxStaticText wxStaticBitmap wxStaticLine wxStaticBox Menus wxMenu Control Bars wxMenuBar wxToolBar wxStatusBar Summary 5. Drawing and Printing. Understanding Device Contexts Available Device Contexts Drawing on Windows with wxClientDC Erasing Window Backgrounds Drawing on Windows with wxPaintDC Drawing on Bitmaps with wxMemoryDC Creating Metafiles with wxMetafileDC Accessing the Screen with wxScreenDC Printing with wxPrinterDC and wxPostScriptDC Drawing Tools wxColour wxPen wxBrush wxFont wxPalette Device Context Drawing Functions Drawing Text Drawing Lines and Shapes Drawing Splines Drawing Bitmaps Filling Arbitrary Areas Logical Functions Using the Printing Framework More on wxPrintout Scaling for Printing and Previewing Printing under Unix with GTK+ 3D Graphics with wxGLCanvas Summary 6. Handling Input. Mouse Input Handling Button and Motion Events Handling Mouse Wheel Events Handling Keyboard Events An Example Character Event Handler Key Code Translation Modifier Key Variations Accelerators Handling Joystick Events wxJoystick Events wxJoystickEvent Member Functions wxJoystick Member Functions Summary 7. Window Layout Using Sizers. Layout Basics Sizers Common Features of Sizers Programming with Sizers Programming with wxBoxSizer Programming with wxStaticBoxSizer Programming with wxGridSizer Programming with wxFlexGridSizer Programming with wxGridBagSizer Further Layout Issues Dialog Units Platform-Adaptive Layouts Dynamic Layouts Summary 8. Using Standard Dialogs. Informative Dialogs wxMessageDialog wxProgressDialog wxProgressDialog Example wxBusyInfo wxShowTip File and Directory Dialogs wxFileDialog wxDirDialog Choice and Selection Dialogs wxColourDialog wxFontDialog wxSingleChoiceDialog wxMultiChoiceDialog Entry Dialogs wxNumberEntryDialog wxTextEntryDialog and wxPasswordEntryDialog wxFindReplaceDialog Printing Dialogs wxPageSetupDialog wxPrintDialog Summary 9. Writing 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 The Complete Class Invoking the Dialog Adapting Dialogs for Small Devices Further Considerations in Dialog Design Keyboard Navigation Data and UI Separation Layout Aesthetics Alternatives to Dialogs Using wxWidgets Resource Files Loading Resources Using Binary and Embedded Resource Files Translating Resources The XRC Format Writing Resource Handlers Foreign Controls Summary 10. Programming with Images. Image Classes in wxWidgets Programming with wxBitmap Creating a wxBitmap Setting a wxMask The XPM Format Drawing with Bitmaps Packaging Bitmap Resources Programming with wxIcon Creating a wxIcon Using wxIcon Associating an Icon with an Application Programming with wxCursor Creating a wxCursor Using wxCursor Using wxSetCursorEvent Programming with wxImage Loading and Saving Images Transparency Transformations Color Reduction Manipulating wxImage Data Directly Image Lists and Icon Bundles Customizing Art in wxWidgets Summary 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 Summary 12. Advanced Window Classes. wxTreeCtrl wxTreeCtrl Styles wxTreeCtrl Events wxTreeCtrl Member Functions wxListCtrl wxListCtrl Styles wxListCtrl Events wxListItem wxListCtrl Member Functions Using wxListCtrl Virtual List Controls wxWizard wxWizard Events wxWizard Member Functions wxWizard Example wxHtmlWindow wxHtmlWindow Styles wxHtmlWindow Member Functions Embedding Windows in HTML Pages HTML Printing wxGrid The wxGrid System of Classes wxGrid Events wxGrid Member Functions wxTaskBarIcon wxTaskBarIcon Events wxTaskBarIcon Member Functions Writing Your Own Controls The Custom Control Declaration Adding DoGetBestSize Defining a New Event Class Displaying Information on the Control Handling Input Defining Default Event Handlers Implementing Validators Implementing Resource Handlers Determining Control Appearance A More Complex Example: wxThumbnailCtrl Summary 13. Data Structure Classes. Why Not STL? Strings Using wxString wxString, Characters, and String Literals Basic wxString to C Pointer Conversions Standard C String Functions Converting to and from Numbers wxStringTokenizer wxRegEx wxArray Array Types wxArrayString Array Construction, Destruction, and Memory Management Array Sample Code wxList and wxNode wxHashMap Storing and Processing Dates and Times wxDateTime wxDateTime Constructors and Modifiers wxDateTime Accessors Getting the Current Time Parsing and Formatting Dates Date Comparisons Date Arithmetic Helper Data Structures wxObject wxLongLong wxPoint and wxRealPoint wxRect wxRegion wxSize wxVariant Summary 14. Files and Streams. File Classes and Functions wxFile and wxFFile wxTextFile wxTempFile wxDir wxFileName File Functions Stream Classes File Streams Memory and String Streams Reading and Writing Data Types Socket Streams Filter Streams Zip Streams Virtual File Systems Summary 15. Memory Management, Debugging, and Error Checking. Memory Management Basics 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 wxMessageOutput Versus wxLog Providing Run-Time Type Information Using wxModule Loading Dynamic Libraries Exception Handling Debugging Tips Debugging X11 Errors Simplify the Problem Debugging a Release Build Summary 16. Writing International Applications. Introduction to Internationalization Providing Translations poEdit Step-by-Step Guide to Using Message Catalogs Using wxLocale Character Encodings and Unicode Converting Data wxEncodingConverter wxCSConv (wxMBConv) Converting Outside of a Temporary Buffer Help Files Numbers and Dates Other Media A Simple Sample Summary 17. Writing Multithreaded Applications. When to Use Threads, and When Not To Using wxThread Creation Specifying Stack Size Specifying Priority 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 Using wxTimer Idle Time Processing Yielding Summary 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 File Sending Thread File Receiving Thread Alternatives to wxSocket Summary 19. Working with Documents and Views. Document/View Basics Step 1: Choose an Interface Style Step 2: Create and Use Frame Classes Step 3: Define Your Document and View Classes Step 4: Define Your Window Classes Step 5: Use wxDocManager and wxDocTemplate Other Document/View Capabilities Standard Identifiers Printing and Previewing File History Explicit Document Creation Strategies for Implementing Undo/Redo Summary 20. Perfecting Your Application. Single Instance or Multiple Instances? Modifying Event Handling Reducing Flicker Implementing Online Help Using a Help Controller Extended wxWidgets HTML Help Authoring Help Other Ways to Provide Help Context-Sensitive Help and Tooltips Menu Help Parsing the Command Line Storing Application Resources Reducing the Number of Data Files Finding the Application Path Invoking Other Applications Running an Application Launching Documents Redirecting Process Input and Output Managing Application Settings Storing Settings Editing Settings Application Installation Installation on Windows Installation on Linux Installation on Mac OS X Following UI Design Guidelines Standard Buttons Menus Icons Fonts and Colors Application Termination Behavior Further Reading Summary 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.
Julian Smart 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 he 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 Cafe, written with wxWidgets. Julian and Harriet live in Edinburgh with their daughter Toni. Kevin Hock 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. Kevin lives in Oxford, Ohio. Stefan Csomor 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 15 years of experience in object-oriented programming and has been writing software for 25 years. Stefan is the main author of the Mac OS port of wxWidgets. (c) Copyright Pearson Education. All rights reserved.