| 1 | <HTML> |
| 2 | |
| 3 | <HEAD> |
| 4 | <TITLE>How to learn wxWidgets programming</TITLE> |
| 5 | </HEAD> |
| 6 | |
| 7 | <BODY BGCOLOR=#FFFFFF TEXT=#000000 LINK=#FF0000 VLINK=#000000> |
| 8 | |
| 9 | <font face="Arial, Lucida Sans, Helvetica"> |
| 10 | |
| 11 | <a name="top"></a> |
| 12 | |
| 13 | <table align=center width=100% border=4 cellpadding=5 cellspacing=0> |
| 14 | <tr> |
| 15 | <td bgcolor="#660000" align=left colspan=2> |
| 16 | <font size=+1 face="Arial, Lucida Sans, Helvetica" color="#FFFFFF"> |
| 17 | How to learn wxWidgets programming |
| 18 | </font> |
| 19 | </td> |
| 20 | </tr> |
| 21 | </table> |
| 22 | |
| 23 | <P> |
| 24 | |
| 25 | The following is a response by Edward Ream to a common question, |
| 26 | "What's the best way to learn wxWidgets [and C++]?".<P> |
| 27 | |
| 28 | Date: Sun, 04 Jun 2000 14:37:06 -0500<BR> |
| 29 | From: "Edward K. Ream" <edream@tds.net> <BR> |
| 30 | To: wx-users@wxwidgets.org<BR> |
| 31 | Subject: Re: [wx-users] How to learn using wx-windows <BR> |
| 32 | Reply-To: wx-users@wxwidgets.org<P> |
| 33 | |
| 34 | > Reading the Linux Journal article on wxpython, and having used wxclips<BR> |
| 35 | > I got interested in wxwidgets 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> |
| 39 | |
| 40 | I'm new to wxWidgets 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 |
| 44 | of using C.<P> |
| 45 | |
| 46 | <B>About C++.</B><P> |
| 47 | |
| 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 wxWidgets 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 |
| 53 | iceberg.<P> |
| 54 | |
| 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. (Lippman 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> |
| 61 | |
| 62 | <B>About applications frameworks.</B><P> |
| 63 | |
| 64 | Application frameworks such as wxWidgets 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 |
| 69 | object.<P> |
| 70 | |
| 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> |
| 78 | |
| 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> |
| 83 | |
| 84 | <ol> |
| 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, |
| 89 | like wxButton. |
| 90 | |
| 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 |
| 96 | they work together. |
| 97 | |
| 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. |
| 105 | |
| 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. |
| 110 | </ol> |
| 111 | |
| 112 | Some other tips:<P> |
| 113 | |
| 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> |
| 117 | |
| 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 | wxWidgets contains other nifty utility classes as well.<P> |
| 121 | |
| 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 |
| 127 | benefit.<P> |
| 128 | |
| 129 | I hope this helps. Perhaps we can work together in learning about |
| 130 | wxWidgets. Please feel free to ask me any questions you might have. If |
| 131 | I've made any blunders in this posting I hope the wxWidgets experts will |
| 132 | correct me gently.<P> |
| 133 | |
| 134 | Edward<BR> |
| 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> |
| 140 | |
| 141 | </font> |
| 142 | |
| 143 | </body> |
| 144 | </html> |