wxWidgetsの使い方

投稿者: | 2016/12/2 金曜日

連載

その1
その2
その3

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を新規に起動し、新しいプロジェクトを作成、場所や名前は任意。
clipshot-2016-12-02-06-05-36

空のプロジェクトを選択
clipshot-2016-12-02-06-06-56

新しい項目の追加でmain.cppを追加
clipshot-2016-12-02-06-07-53

プロジェクト設定

追加のインクルードディレクトリで
C:\local\wxWidgets-3.0.2\includeC:\local\wxWidgets-3.0.2\lib\vc_lib\mswudを追加。
clipshot-2016-12-02-06-12-13

追加のライブラリディレクトリでC:\local\wxWidgets-3.0.2\lib\vc_libを追加
clipshot-2016-12-02-06-13-22

コマンドプロンプトで以下を実行してインポートするライブラリ一覧を得る。今はデバッグビルドしかしてないので全部デバッグライブラリ。リリースライブラリも同じディレクトリにできるのでリリースの設定の時はいったん全部削除したほうがいい。

>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.libComctl32.libを追加のライブラリに加える。(上記のライブラリは本当に全部必要かは分からないが面倒なので全部指定した。)
clipshot-2016-12-02-06-22-04

main.cpp

以下を作成。

#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!");
}

ビルドして実行

clipshot-2016-12-02-06-25-16

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です