4 <TITLE>How to learn wxWindows programming
</TITLE> 
   7 <BODY BGCOLOR=#FFFFFF TEXT=#
000000 LINK=#FF0000 VLINK=#
000000> 
   9 <font face=
"Arial, Lucida Sans, Helvetica"> 
  13 <table align=center width=
100% border=
4 cellpadding=
5 cellspacing=
0> 
  15 <td bgcolor=
"#660000" align=left colspan=
2> 
  16 <font size=+
1 face=
"Arial, Lucida Sans, Helvetica" color=
"#FFFFFF"> 
  17 How to learn wxWindows programming
 
  25 The following is a response by Edward Ream to a common question,
 
  26 "What's the best way to learn wxWindows [and C++]?".
<P> 
  28 Date: Sun, 
04 Jun 
2000 14:
37:
06 -
0500<BR> 
  29 From: "Edward K. Ream" 
<edream@tds.net
> <BR> 
  30 To: wx-users@wxwindows.org
<BR> 
  31 Subject: Re: [wx-users] How to learn using wx-windows 
<BR> 
  32 Reply-To: wx-users@wxwindows.org
<P> 
  34 > Reading the Linux Journal article on wxpython, and having used wxclips
<BR> 
  35 > I got interested in wxwindows as a development interface. However, the
<BR> 
  36 > programming experience I got is old, and from a former generation (For-
<BR> 
  37 > tran). I'd like to refresh my experience and start in C++.  Will
<BR> 
  38 > wx-windows be a very high step to take?
<P> 
  40 I'm new to wxWindows myself, but I'd like to answer this question
 
  41 anyway. In the past two years I've learned two similar frameworks
 
  42 (Apple's Yellow Box, aka NextStep/OpenStep and Borland's C++
 
  43 Builder/Delphi) and last year I became a C++ enthusiast after 
20 years
 
  48 The major Aha for me was that the complexity of C++ doesn't matter in
 
  49 practice.  What _does_ matter is that C++ allows you to do simple things
 
  50 simply, more simply than C.  With a system like wxWindows you will be
 
  51 creating objects and then using those objects to call methods.  So don't
 
  52 be afraid of C++: you'll only be using the easy tip of the
 
  55 Besides the C++ Programming Language, by Bjarne Stroustrup, the
 
  56 "official" guide to C++, I highly recommend Inside the C++ Object Model,
 
  57 by Stanley B. Lippman.  (Lipmann was one of the C++ honchos at Bell
 
  58 Labs.)  This book will tell you what _not_ to do, as well as why
 
  59 everything in C++ is as it is.  If you are confused by anything in C++,
 
  60 Lippman's book is the cure.
<P> 
  62 <B>About applications frameworks.
</B><P> 
  64 Application frameworks such as wxWindows are organized around a set of
 
  65 cooperating classes.  Take a look at the main application class, wxApp,
 
  66 some frame and panel classes, graphics classes, menu classes, control
 
  67 classes, etc.  In general, to do anything in a framework involves
 
  68 creating an object of the specified type, then doing something with that
 
  71 For example, suppose you want to create a menu bar.  A menu bar is
 
  72 composed of a single menu bar object of type(class) wxMenuBar that
 
  73 contains menu objects of type wxMenu.  Each menu object contains menu
 
  74 item objects of type wxMenuItem.  So you create the menu bar object,
 
  75 then create all the menu objects (creating the menu item objects along
 
  76 the way) and finally "attach" the menu objects to the menu bar object
 
  77 using a call to the wxMenuBar::Append method.
<P> 
  79 As an overview I would look at the "Alphabetical class reference"
 
  80 section of the reference manual.  I find the HTML version to be the
 
  81 easiest to use:  you can browse very quickly through it.  Here's how to
 
  82 read this (very large) reference:
<P> 
  85 <li>Get an overview of the kinds of classes involved.  The class names
 
  86 will tell you a lot about what each class does.  Open some of the
 
  87 classes, in particular, wxApp (the main application object), wxFrame,
 
  88 wxControl (the base class for all controls) and one or two controls,
 
  91 <li>When scanning a class for the first several times, read the
 
  92 introductory remarks and quickly scan the list of methods of the class
 
  93 to get a general idea about what kinds of operations can be done to
 
  94 objects of the class.  You are not looking for detail at this stage,
 
  95 just for the big picture.  In particular, what classes exist and how do
 
  98 <li>Pay particular attention to the classes from which a class is
 
  99 derived.  For example, a button (an object of type wxButton) is derived
 
 100 from the wxControl, wxWindow, wxEvtHandler and wxObject classes.  What
 
 101 does this mean?  It means that a button _is_ a control, and a button
 
 102 _is_ a window, and a button _is_ an event handler and a button _is_ an
 
 103 object.  So you must understand the parent classes of an object to
 
 104 understand the object itself.
 
 106 For example, if b is a button you can invoke b.m for any of method m of
 
 107 the wxControl, wxWindow, wxEvtHandler or wxObject classes.  You are not
 
 108 limited to just the methods of wxButton!  This is one of the keys of
 
 109 object oriented programming.
 
 114 Read some sample code.  You will find that almost none of the C++
 
 115 language is actually being used; it's just endlessly creating objects
 
 116 and then calling methods using those objects.
<P> 
 118 Learn as much as you can about the String class; after using a good
 
 119 String class you'll never want to use C's string functions again. 
 
 120 wxWindows contains other nifty utilty classes as well.
<P> 
 122 The application class, wxApp, contains the main event loop.  Learn about
 
 123 event handling and event tables (reading sample code will help). Almost
 
 124 everything in this kind of application framework happens as the result
 
 125 of an event and your app is essentially doing nothing but responding to
 
 126 events.  Having the event loop written for you is a major, major
 
 129 I hope this helps. Perhaps we can work together in learning about
 
 130 wxWindows.  Please feel free to ask me any questions you might have.  If
 
 131 I've made any blunders in this posting I hope the wxWindows experts will
 
 132 correct me gently.
<P> 
 135 --------------------------------------------------------------------
<BR> 
 136 Edward K. Ream   email:  edream@tds.net
<BR> 
 137 Leo: Literate Editor with Outlines
<BR> 
 138 Leo: http:
//personalpages.tds.net/~edream/front.html
<BR> 
 139 --------------------------------------------------------------------
<P>