1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: OLE Automation wxWidgets sample
4 // Author: Julian Smart
8 // Copyright: (c) Julian Smart
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // For compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
27 // for all others, include the necessary headers (this file is usually all you
28 // need because it includes almost all "standard" wxWidgets headers
33 #include "wx/msw/ole/automtn.h"
36 #error "Sorry, this sample works under Windows only."
39 // ----------------------------------------------------------------------------
41 // ----------------------------------------------------------------------------
42 // the application icon
43 #if defined(__WXGTK__) || defined(__WXX11__) || defined(__WXMOTIF__)
44 #include "mondrian.xpm"
47 // ----------------------------------------------------------------------------
49 // ----------------------------------------------------------------------------
51 // Define a new application type, each program should derive a class from wxApp
52 class MyApp
: public wxApp
55 // override base class virtuals
56 // ----------------------------
58 // this one is called on application startup and is a good place for the app
59 // initialization (doing it here and not in the ctor allows to have an error
60 // return: if OnInit() returns false, the application terminates)
61 virtual bool OnInit();
64 // Define a new frame type: this is going to be our main frame
65 class MyFrame
: public wxFrame
69 MyFrame(const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
);
71 // event handlers (these functions should _not_ be virtual)
72 void OnQuit(wxCommandEvent
& event
);
73 void OnAbout(wxCommandEvent
& event
);
74 void OnTest(wxCommandEvent
& event
);
77 // any class wishing to process wxWidgets events must use this macro
81 // ----------------------------------------------------------------------------
83 // ----------------------------------------------------------------------------
85 // IDs for the controls and the menu commands
93 // controls start here (the numbers are, of course, arbitrary)
97 // ----------------------------------------------------------------------------
98 // event tables and other macros for wxWidgets
99 // ----------------------------------------------------------------------------
101 // the event tables connect the wxWidgets events with the functions (event
102 // handlers) which process them. It can be also done at run-time, but for the
103 // simple menu events like this the static method is much simpler.
104 BEGIN_EVENT_TABLE(MyFrame
, wxFrame
)
105 EVT_MENU(OleAuto_Quit
, MyFrame::OnQuit
)
106 EVT_MENU(OleAuto_About
, MyFrame::OnAbout
)
107 EVT_MENU(OleAuto_Test
, MyFrame::OnTest
)
110 // Create a new application object: this macro will allow wxWidgets to create
111 // the application object during program execution (it's better than using a
112 // static object for many reasons) and also declares the accessor function
113 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
117 // ============================================================================
119 // ============================================================================
121 // ----------------------------------------------------------------------------
122 // the application class
123 // ----------------------------------------------------------------------------
125 // `Main program' equivalent: the program execution "starts" here
128 // Create the main application window
129 MyFrame
*frame
= new MyFrame(_T("OleAuto wxWidgets App"),
130 wxPoint(50, 50), wxSize(450, 340));
132 // Show it and tell the application that it's our main window
133 // @@@ what does it do exactly, in fact? is it necessary here?
137 // success: wxApp::OnRun() will be called which will enter the main message
138 // loop and the application will run. If we returned false here, the
139 // application would exit immediately.
143 // ----------------------------------------------------------------------------
145 // ----------------------------------------------------------------------------
148 MyFrame::MyFrame(const wxString
& title
, const wxPoint
& pos
, const wxSize
& size
)
149 : wxFrame((wxFrame
*)NULL
, wxID_ANY
, title
, pos
, size
)
151 // set the frame icon
152 SetIcon(wxICON(mondrian
));
155 wxMenu
*menuFile
= new wxMenu
;
157 menuFile
->Append(OleAuto_Test
, _T("&Test Excel Automation..."));
158 menuFile
->Append(OleAuto_About
, _T("&About..."));
159 menuFile
->AppendSeparator();
160 menuFile
->Append(OleAuto_Quit
, _T("E&xit"));
162 // now append the freshly created menu to the menu bar...
163 wxMenuBar
*menuBar
= new wxMenuBar
;
164 menuBar
->Append(menuFile
, _T("&File"));
166 // ... and attach this menu bar to the frame
170 // create a status bar just for fun (by default with 1 pane only)
172 SetStatusText(_T("Welcome to wxWidgets!"));
173 #endif // wxUSE_STATUSBAR
179 void MyFrame::OnQuit(wxCommandEvent
& WXUNUSED(event
))
181 // true is to force the frame to close
185 void MyFrame::OnAbout(wxCommandEvent
& WXUNUSED(event
))
187 wxMessageBox(_T("This is an OLE Automation sample"),
188 _T("About OleAuto"), wxOK
| wxICON_INFORMATION
, this);
191 /* Tests OLE automation by making the active Excel cell bold,
192 * and changing the text.
194 void MyFrame::OnTest(wxCommandEvent
& WXUNUSED(event
))
196 wxMessageBox(_T("Please ensure Excel is running, then press OK.\nThe active cell should then say 'wxWidgets automation test!' in bold."));
198 wxAutomationObject excelObject
, rangeObject
;
199 if (!excelObject
.GetInstance(_T("Excel.Application")))
201 if (!excelObject
.CreateInstance(_T("Excel.Application")))
203 wxMessageBox(_T("Could not create Excel object."));
207 if (!excelObject
.PutProperty(_T("ActiveCell.Value"), _T("wxWidgets automation test!")))
209 wxMessageBox(_T("Could not set active cell value."));
212 if (!excelObject
.PutProperty(_T("ActiveCell.Font.Bold"), wxVariant(true)) )
214 wxMessageBox(_T("Could not put Bold property to active cell."));