]> git.saurik.com Git - wxWidgets.git/blame - samples/dynamic/dynamic.cpp
use wxDC::GetMultiLineTextExtent() instead of duplicating its code in wxButton::DoGet...
[wxWidgets.git] / samples / dynamic / dynamic.cpp
CommitLineData
3e0f9228
JS
1/////////////////////////////////////////////////////////////////////////////
2// Name: dynamic.cpp
be5a51fb 3// Purpose: Dynamic events wxWidgets sample
3e0f9228
JS
4// Author: Julian Smart
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
6aa89a22 8// Copyright: (c) Julian Smart
f5d01a1c 9// Licence: wxWindows license
3e0f9228
JS
10/////////////////////////////////////////////////////////////////////////////
11
788233da 12#if defined(__GNUG__) && !defined(__APPLE__)
3e0f9228
JS
13#pragma implementation "dynamic.cpp"
14#pragma interface "dynamic.cpp"
15#endif
16
17// For compilers that support precompilation, includes "wx/wx.h".
18#include "wx/wxprec.h"
19
20#ifdef __BORLANDC__
21#pragma hdrstop
22#endif
23
24#ifndef WX_PRECOMP
25#include "wx/wx.h"
26#endif
27
618f2efa 28#if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__) || defined(__WXMAC__) || defined(__WXMGL__)
3e0f9228
JS
29#include "mondrian.xpm"
30#endif
31
32// Define a new application type
33class MyApp: public wxApp
34{ public:
35 bool OnInit(void);
36};
37
38// Define a new frame type
39class MyFrame: public wxFrame
40{ public:
ab1ca7b3 41 MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h);
f5d01a1c 42
3e0f9228
JS
43 public:
44 void OnQuit(wxCommandEvent& event);
45 void OnAbout(wxCommandEvent& event);
3e0f9228
JS
46};
47
48// ID for the menu commands
f5d01a1c
VZ
49#define DYNAMIC_QUIT 1
50#define DYNAMIC_TEXT 101
51#define DYNAMIC_ABOUT 102
3e0f9228
JS
52
53// Create a new application object
f5d01a1c 54IMPLEMENT_APP (MyApp)
3e0f9228
JS
55
56// `Main program' equivalent, creating windows and returning main app frame
57bool MyApp::OnInit(void)
58{
59 // Create the main frame window
be5a51fb 60 MyFrame *frame = new MyFrame(NULL, _T("Dynamic wxWidgets App"), 50, 50, 450, 340);
3e0f9228 61
07850a49 62 frame->Connect( DYNAMIC_QUIT, wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
f5d01a1c
VZ
63 (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
64 &MyFrame::OnQuit );
07850a49 65 frame->Connect( DYNAMIC_ABOUT, wxID_ANY, wxEVT_COMMAND_MENU_SELECTED,
f5d01a1c
VZ
66 (wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
67 &MyFrame::OnAbout );
3e0f9228
JS
68
69 // Give it an icon
70#ifdef __WXMSW__
ab1ca7b3 71 frame->SetIcon(wxIcon(_T("mondrian")));
3e0f9228
JS
72#else
73 frame->SetIcon(wxIcon(mondrian_xpm));
74#endif
75
76 // Make a menubar
77 wxMenu *file_menu = new wxMenu;
78
ab1ca7b3
MB
79 file_menu->Append(DYNAMIC_ABOUT, _T("&About"));
80 file_menu->Append(DYNAMIC_QUIT, _T("E&xit"));
3e0f9228 81 wxMenuBar *menu_bar = new wxMenuBar;
ab1ca7b3 82 menu_bar->Append(file_menu, _T("&File"));
3e0f9228
JS
83 frame->SetMenuBar(menu_bar);
84
85 // Make a panel with a message
07850a49 86 wxPanel *panel = new wxPanel(frame, wxID_ANY, wxPoint(0, 0), wxSize(400, 200), wxTAB_TRAVERSAL);
3e0f9228 87
07850a49 88 (void)new wxStaticText(panel, 311, _T("Hello!"), wxPoint(10, 10), wxDefaultSize, 0);
3e0f9228
JS
89
90 // Show the frame
07850a49 91 frame->Show(true);
f5d01a1c 92
3e0f9228
JS
93 SetTopWindow(frame);
94
07850a49 95 return true;
3e0f9228
JS
96}
97
98// My frame constructor
ab1ca7b3 99MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
07850a49 100 wxFrame(frame, wxID_ANY, title, wxPoint(x, y), wxSize(w, h))
3e0f9228
JS
101{}
102
103void MyFrame::OnQuit(wxCommandEvent& WXUNUSED(event) )
104{
07850a49 105 Close(true);
3e0f9228
JS
106}
107
108void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event) )
109{
ab1ca7b3
MB
110 wxMessageDialog dialog(this, _T("This demonstrates dynamic event handling"),
111 _T("About Dynamic"), wxYES_NO|wxCANCEL);
3e0f9228
JS
112
113 dialog.ShowModal();
114}
115
116