]>
Commit | Line | Data |
---|---|---|
f6bcfd97 BP |
1 | <HTML> |
2 | ||
3 | <HEAD> | |
fc2171bd | 4 | <TITLE>How to learn wxWidgets programming</TITLE> |
f6bcfd97 BP |
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"> | |
fc2171bd | 17 | How to learn wxWidgets programming |
f6bcfd97 BP |
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, | |
fc2171bd | 26 | "What's the best way to learn wxWidgets [and C++]?".<P> |
f6bcfd97 BP |
27 | |
28 | Date: Sun, 04 Jun 2000 14:37:06 -0500<BR> | |
29 | From: "Edward K. Ream" <edream@tds.net> <BR> | |
77ffb593 | 30 | To: wx-users@wxwidgets.org<BR> |
f6bcfd97 | 31 | Subject: Re: [wx-users] How to learn using wx-windows <BR> |
77ffb593 | 32 | Reply-To: wx-users@wxwidgets.org<P> |
f6bcfd97 | 33 | |
2edb0bde | 34 | > Reading the Linux Journal article on wxpython, and having used wxclips<BR> |
77ffb593 | 35 | > I got interested in wxwidgets as a development interface. However, the<BR> |
2edb0bde VZ |
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> | |
f6bcfd97 | 39 | |
fc2171bd | 40 | I'm new to wxWidgets myself, but I'd like to answer this question |
f6bcfd97 BP |
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 | |
fc2171bd | 50 | simply, more simply than C. With a system like wxWidgets you will be |
f6bcfd97 BP |
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, | |
2edb0bde | 57 | by Stanley B. Lippman. (Lippman was one of the C++ honchos at Bell |
f6bcfd97 BP |
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 | ||
fc2171bd | 64 | Application frameworks such as wxWidgets are organized around a set of |
f6bcfd97 BP |
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. | |
fc2171bd | 120 | wxWidgets contains other nifty utility classes as well.<P> |
f6bcfd97 BP |
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 | |
fc2171bd JS |
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 | |
f6bcfd97 BP |
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> |