wxWidgetsはクロスプラットフォームでGUIアプリを作れるライブラリだがここではVC2010を使って実験した。
wxWidgetsのページからダウンロード、ここではwxWidgets-3.0.0.7zをダウンロードした。作業フォルダはC:\work\wxWidgetsにしてここに展開した。
最初にライブラリを作らなければならない、ここではスタティックライブラリを作る。Visual C++ 2010 Expressで”C:\work\wxWidgets\build\msw\wx_vc10.sln”を開き、ソリューション構成を「Debug」にして、ソリューションのビルドを行う。これによりC:\work\wxWidgets\lib\vc_lib配下にライブラリとsetup.hが作られる。
つぎに新しくソリューションを作る。win32 windowsアプリでここでは名前はmywxappとした。
プロジェクトのプロパティで
追加のインクルードディレクトリにC:\work\wxWidgets\includeとC:\work\wxWidgets\include\msvcを追加
追加のライブラリディレクトリでC:\work\wxWidgets\lib\vc_libを追加
追加の依存ファイルで、wxbase30ud.libとwxmsw30ud_core.libを追加
リソースの追加のインクルードディレクトリにC:\work\wxWidgets\includeを追加
ソースコードはここを参考に以下のようにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#include "stdafx.h" // wxWidgets "Hello world" Program // For compilers that support precompilation, includes "wx/wx.h". #include <wx/wxprec.h> #ifndef WX_PRECOMP #include <wx/wx.h> #endif class MyApp: public wxApp { public: virtual bool OnInit(); }; class MyFrame: public wxFrame { public: MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size); private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); wxDECLARE_EVENT_TABLE(); }; enum { ID_Hello = 1 }; wxBEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(ID_Hello, MyFrame::OnHello) EVT_MENU(wxID_EXIT, MyFrame::OnExit) EVT_MENU(wxID_ABOUT, MyFrame::OnAbout) wxEND_EVENT_TABLE() wxIMPLEMENT_APP(MyApp); bool MyApp::OnInit() { MyFrame *frame = new MyFrame( "Hello World", wxPoint(50, 50), wxSize(450, 340) ); frame->Show( true ); return true; } MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) : wxFrame(NULL, wxID_ANY, title, pos, size) { wxMenu *menuFile = new wxMenu; menuFile->Append(ID_Hello, "&Hello...\tCtrl-H", "Help string shown in status bar for this menu item"); menuFile->AppendSeparator(); menuFile->Append(wxID_EXIT); wxMenu *menuHelp = new wxMenu; menuHelp->Append(wxID_ABOUT); wxMenuBar *menuBar = new wxMenuBar; menuBar->Append( menuFile, "&File" ); menuBar->Append( menuHelp, "&Help" ); SetMenuBar( menuBar ); CreateStatusBar(); SetStatusText( "Welcome to wxWidgets!" ); } void MyFrame::OnExit(wxCommandEvent& event) { Close( true ); } void MyFrame::OnAbout(wxCommandEvent& event) { wxMessageBox( "This is a wxWidgets' Hello world sample", "About Hello World", wxOK | wxICON_INFORMATION ); } void MyFrame::OnHello(wxCommandEvent& event) { wxLogMessage("Hello world from wxWidgets!"); } |
wxWidgetsはMFCと同じような構成でWinMainはライブラリが持ち、App,Frameなどがあり、メッセージを処理するマクロがある。特徴は他のプラットフォームでも動くことなのでやってみよう。