連載
wxWidgetsはクロスプラットフォームなGUIライブラリ、ここではWindowsでアプリをつくってみる。
環境
Windows 10
Visual C++ 2008 Express
インストール
公式からwxWidgets-3.0.2.7zをダウンロードして、C:\local\wxWidgets-3.0.2に展開。
VC2008でC:\local\wxWidgets-3.0.2\build\msw\wx_vc9.slnを開く。
Debugでビルドする。
成功すればC:\local\wxWidgets-3.0.2\lib\vc_lib以下にファイルができる。
アプリ作成
VC2008を新規に起動し、新しいプロジェクトを作成、場所や名前は任意。
プロジェクト設定
追加のインクルードディレクトリで
C:\local\wxWidgets-3.0.2\includeとC:\local\wxWidgets-3.0.2\lib\vc_lib\mswudを追加。
追加のライブラリディレクトリでC:\local\wxWidgets-3.0.2\lib\vc_libを追加
コマンドプロンプトで以下を実行してインポートするライブラリ一覧を得る。今はデバッグビルドしかしてないので全部デバッグライブラリ。リリースライブラリも同じディレクトリにできるのでリリースの設定の時はいったん全部削除したほうがいい。
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 |
>dir /b C:\local\wxWidgets-3.0.2\lib\vc_lib\*.lib wxbase30ud.lib wxbase30ud_net.lib wxbase30ud_xml.lib wxexpatd.lib wxjpegd.lib wxmsw30ud_adv.lib wxmsw30ud_aui.lib wxmsw30ud_core.lib wxmsw30ud_gl.lib wxmsw30ud_html.lib wxmsw30ud_media.lib wxmsw30ud_propgrid.lib wxmsw30ud_qa.lib wxmsw30ud_ribbon.lib wxmsw30ud_richtext.lib wxmsw30ud_stc.lib wxmsw30ud_webview.lib wxmsw30ud_xrc.lib wxpngd.lib wxregexud.lib wxscintillad.lib wxtiffd.lib wxzlibd.lib > |
上記のライブラリと、Rpcrt4.libとComctl32.libを追加のライブラリに加える。(上記のライブラリは本当に全部必要かは分からないが面倒なので全部指定した。)
main.cpp
以下を作成。
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 |
#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(); private: void OnHello(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); }; enum { ID_Hello = 1 }; wxIMPLEMENT_APP(MyApp); bool MyApp::OnInit() { MyFrame *frame = new MyFrame(); frame->Show( true ); return true; } MyFrame::MyFrame() : wxFrame(NULL, wxID_ANY, "Hello World") { 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!" ); Bind(wxEVT_MENU, &MyFrame::OnHello, this, ID_Hello); Bind(wxEVT_MENU, &MyFrame::OnAbout, this, wxID_ABOUT); Bind(wxEVT_MENU, &MyFrame::OnExit, this, wxID_EXIT); } 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!"); } |