]> git.saurik.com Git - wxWidgets.git/blame - docs/doxygen/overviews/helloworld.h
use #defines, not typedefs, for compatibility class names declarations to avoid break...
[wxWidgets.git] / docs / doxygen / overviews / helloworld.h
CommitLineData
15b6757b 1/////////////////////////////////////////////////////////////////////////////
c33e257b 2// Name: helloworld.h
15b6757b
FM
3// Purpose: topic overview
4// Author: wxWidgets team
5// RCS-ID: $Id$
6// Licence: wxWindows license
7/////////////////////////////////////////////////////////////////////////////
8
880efa2a 9/**
36c9828f 10
928f1a07
FM
11@page overview_helloworld Hello World Example
12
13Many people have requested a mini-sample to be published here
14so that some quick judgment concerning syntax
15and basic principles can be made, so here we go.
16
17First, you have to include wxWidgets' header files, of course. This can
18be done on a file by file basis (such as <tt>@#include "wx/window.h"</tt>)
19or using one global include (<tt>@#include "wx/wx.h"</tt>). This is
20also useful on platforms which support precompiled headers such
21as all major compilers on the Windows platform and GCC on Unix platforms.
22
23@code
24//
25// file name: hworld.cpp
26//
27// purpose: wxWidgets "Hello world"
28//
29
30// For compilers that support precompilation, includes "wx/wx.h".
31#include "wx/wxprec.h"
32
33#ifdef __BORLANDC__
34 #pragma hdrstop
35#endif
36
37#ifndef WX_PRECOMP
38 #include "wx/wx.h"
39#endif
40@endcode
41
42Practically every app should define a new class derived from wxApp.
43By overriding wxApp's OnInit() the program can be initialized,
44e.g. by creating a new main window.
45
46@code
47class MyApp: public wxApp
48{
49 virtual bool OnInit();
50};
51@endcode
52
53The main window is created by deriving a class from wxFrame and
54giving it a menu and a status bar in its constructor. Also, any class
55that wishes to respond to any "event" (such as mouse clicks or
56messages from the menu or a button) must declare an event table
57using the macro below.
58
59Finally, the way to react to such events must be done in "handlers".
60In our sample, we react to two menu items, one for "Quit" and one for
61displaying an "About" window. These handlers should not be virtual.
62
63@code
64class MyFrame: public wxFrame
65{
66public:
67 MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size);
68
69 void OnQuit(wxCommandEvent& event);
70 void OnAbout(wxCommandEvent& event);
71
72private:
73 DECLARE_EVENT_TABLE()
74};
75@endcode
76
77In order to be able to react to a menu command, it must be given a unique
78identifier such as a const or an enum.
79
80@code
81enum
82{
83 ID_Quit = 1,
84 ID_About,
85};
86@endcode
87
88We then proceed to actually implement an event table in which the events
89are routed to their respective handler functions in the class MyFrame.
90
91There are predefined macros for routing all common events, ranging from
92the selection of a list box entry to a resize event when a user resizes
93a window on the screen. If -1 is given as the ID, the given handler will be
94invoked for any event of the specified type, so that you could add just
95one entry in the event table for all menu commands or all button commands etc.
96
97The origin of the event can still be distinguished in the event handler as
98the (only) parameter in an event handler is a reference to a wxEvent object,
99which holds various information about the event (such as the ID of and a
100pointer to the class, which emitted the event).
101
102@code
103BEGIN_EVENT_TABLE(MyFrame, wxFrame)
104 EVT_MENU(ID_Quit, MyFrame::OnQuit)
105 EVT_MENU(ID_About, MyFrame::OnAbout)
106END_EVENT_TABLE()
107@endcode
108
109As in all programs there must be a "main" function. Under wxWidgets main is implemented
110using this macro, which creates an application instance and starts the program.
111
112@code
113IMPLEMENT_APP(MyApp)
114@endcode
115
116As mentioned above, wxApp::OnInit() is called upon startup and should be
117used to initialize the program, maybe showing a "splash screen" and creating
118the main window (or several). The frame should get a title bar text ("Hello World")
119and a position and start-up size. One frame can also be declared to be the
120top window. Returning @true indicates a successful initialization.
121
122@code
123bool MyApp::OnInit()
124{
125 MyFrame *frame = new MyFrame( "Hello World", wxPoint(50,50), wxSize(450,340) );
126 frame->Show( true );
127 SetTopWindow( frame );
128 return true;
129}
130@endcode
131
132In the constructor of the main window (or later on) we create a menu with two menu
133items as well as a status bar to be shown at the bottom of the main window. Both have
134to be "announced" to the frame with respective calls.
135
136@code
137MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
c33e257b 138 : wxFrame((wxFrame *)NULL, -1, title, pos, size)
928f1a07
FM
139{
140 wxMenu *menuFile = new wxMenu;
141
142 menuFile->Append( ID_About, "" );
143 menuFile->AppendSeparator();
144 menuFile->Append( ID_Quit, "E" );
145
146 wxMenuBar *menuBar = new wxMenuBar;
147 menuBar->Append( menuFile, "" );
148
149 SetMenuBar( menuBar );
150
151 CreateStatusBar();
152 SetStatusText( "Welcome to wxWidgets!" );
153}
154@endcode
155
156Here are the actual event handlers. MyFrame::OnQuit() closes the main window
157by calling Close(). The parameter @true indicates that other windows have no veto
158power such as after asking "Do you really want to close?". If there is no other
159main window left, the application will quit.
160
161@code
162void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event))
163{
164 Close( true );
165}
166@endcode
167
168MyFrame::OnAbout() will display a small window with some text in it. In this
169case a typical "About" window with information about the program.
170
171@code
172void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
173{
174 wxMessageBox( "This is a wxWidgets' Hello world sample",
175 "About Hello World", wxOK | wxICON_INFORMATION );
176}
177@endcode
36c9828f 178
c33e257b 179*/
36c9828f 180