====== wxWidgets ======
wxWidgetsは、LinuxのGTK+、X11、MotifやWindows、Windows CE、Mac OS Xなどで動作するオープンソースのクロス プラットフォーム GUIライブラリである。\\
\\
wxWidgetsの特色は、作成されたアプリケーションは、各プラットフォームのネイティブ コントロール/コモン ダイアログを利用するので、どのプラットフォームにおいても見た目が自然で違和感なく利用することができる。\\
ライブラリ自体はC++で記述されているが、開発者はC++のほか、Python (wxPython)、C# .NET (wx.NET)、Erlang (wxErlang)、Haskell (wxHaskell)、Lua (wxLua)、Perl (wxPerl)、Ruby (wxRuby)、Smalltalk (wxSqueak)、Java (wx4j)、JavaScript (wxJavaScript) 向けのバインディングを利用して、wxWidgetsベースのアプリケーションを作成することができる。\\
\\
wxWidgetsの歴史については、wxWidgets(当初 wxWindows)は1992年よりJulian Smart氏によって開発が始められ、MicrosoftよりWindowsの商標を尊重するようにとの要求を受けて、2004年2月20日にプロジェクトはwxWidgetsに改名したとの発表を行った。(インターネット上で文献を探す際は、wxWindowsとwxWidgetsの両方で探すと良い。)\\
\\
参考文献:\\
[[http://en.wikipedia.org/wiki/WxWidgets|wxWidgets - Wikipedia, the free encyclopedia]]\\
===== ダウンロード =====
==== wxWidgets: Cross-Platform GUI Library のサイトよりダウンロードする場合 ====
- [[http://www.wxwidgets.org/|wxWidgets: Cross-Platform GUI Library]]の[[http://www.wxwidgets.org/downloads/|Downloads]]を開く。
- Latest Development Release: 3.1.2 の Source Code より、**[[https://github.com/wxWidgets/wxWidgets/releases/download/v3.1.2/wxWidgets-3.1.2.7z|Windows 7z]]** をクリックして wxWidgets-x.x.x.7z をダウンロードする。
* gz、bz2 および zip の形式をお好みで選択。
* ライブラリはソースコードからビルドする必要がある。
* 最初はドキュメントなどもすべて含んでいた方が良いので **wxAll**をダウンロードすることをお勧めする。
* 例えば、Visual C++ のワークスペースでのビルドが上手く行かない場合は、**wxMsw** をダウンロードして試すことをおすすめする。(**wxAll** と違っていて直されている場合がある。)
- Windows では wxWidgets-x.x.x.7z の内容を C:\Libraries\ などに解凍する。
==== GitHub より clone する場合 ====
[[https://github.com/wxWidgets/wxWidgets|GitHub - wxWidgets/wxWidgets: Cross-Platform GUI Library - Report issues here: https://trac.wxwidgets.org/]] より clone する。\\
$ git clone --recurse-submodules https://github.com/wxWidgets/wxWidgets.git
\\ ※**--recurse-submodules** 無しで clone してしまった場合は以下のコマンドを実行する。\\
> cd wxWidgets
> git submodule update --init
===== ビルド/インストール =====
==== Linux でインストールする場合 ====
wxGTK2\\
$ sudo dnf install wxGTK wxGTK-devel
wxGTK3\\
$ sudo dnf install wxGTK3 wxGTK3-devel
==== Linux でビルドする場合 ====
静的リンク
$ cd wxWidgets
$ ./configure --disable-shared
$ make
動的リンク
$ cd wxWidgets
$ ./configure
$ make
==== Windows 10 上の Visual C++ 2019 でビルドする場合 ====
- タスクバーの「ここに入力して検索」に **sysdm.cpl** を入力して Enter キーを押す。
- 「システムのプロパティ」の「詳細設定」タブの [環境変数] ボタンを押して「環境変数」画面を開く。
- 「環境変数」画面の [システム環境変数」の [新規] ボタンを押して以下の環境変数を登録する。
変数名: WXWIN
変数値: C:\Libraries\wxWidgets
- タスクバーの「ここに入力して検索」に cmd を入力して「コマンドプロンプト」を「管理者として実行」する。
- 「コマンドプロンプト」以下のコマンドを入力する。
> cd %WXWIN%\include\wx\msw\
> mklink setup.h setup0.h
setup.h <<===>> setup0.h のシンボリック リンクが作成されました
- 「スタート」の「Visual Studio 2019」より「x86 Native Tools Command Prompt for VS 2019」または「x64 Native Tools Command Prompt for VS 2019」を起動して、以下のコマンドを入力する。
> cd %WXWIN%\build\msw
> nmake /f makefile.vc
※デフォルトはデバッグ設定で静的ライブラリとして wxWidgets を構築する。\\
* リリースビルドは以下のコマンドを実行する。
> nmake /f makefile.vc BUILD=release
* リリースビルドの DLL バージョンは以下のコマンドを実行する。\\
> nmake /f makefile.vc BUILD=release SHARED=1
※**TARGET_CPU=X64** を指定すると Win64 バージョンをビルドする。
- 以下のようにコンパイルが開始される。
Microsoft(R) Program Maintenance Utility Version 14.20.27305.0
Copyright (C) Microsoft Corporation. All rights reserved.
if not exist vc_mswud_x64 mkdir vc_mswud_x64
cl /c /nologo /TC /Fovc_mswud_x64\wxregex_regcomp.obj /MDd /DWIN32 /Zi /Fd..\..\lib\vc_x64_lib\wxregexud.pdb /D_DEBUG /Od /D_CRT_SECURE_NO_DEPRECATE=1 /D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1 /DNDEBUG /D_CRT_SECURE_NO_WARNINGS /I..\..\include /I..\..\lib\vc_x64_lib\mswud /D__WXMSW__ /D_UNICODE ..\..\src\regex\regcomp.c
regcomp.c
cl /c /nologo /TC /Fovc_mswud_x64\wxregex_regexec.obj /MDd /DWIN32 /Zi /Fd..\..\lib\vc_x64_lib\wxregexud.pdb /D_DEBUG /Od /D_CRT_SECURE_NO_DEPRECATE=1 /D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1 /DNDEBUG /D_CRT_SECURE_NO_WARNINGS /I..\..\include /I..\..\lib\vc_x64_lib\mswud /D__WXMSW__ /D_UNICODE ..\..\src\regex\regexec.c
regexec.c
cl /c /nologo /TC /Fovc_mswud_x64\wxregex_regerror.obj /MDd /DWIN32 /Zi /Fd..\..\lib\vc_x64_lib\wxregexud.pdb /D_DEBUG /Od /D_CRT_SECURE_NO_DEPRECATE=1 /D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1 /DNDEBUG /D_CRT_SECURE_NO_WARNINGS /I..\..\include /I..\..\lib\vc_x64_lib\mswud /D__WXMSW__ /D_UNICODE ..\..\src\regex\regerror.c
regerror.c
- ビルドが完了すると以下の出力が得られる。
include path: %WXWIN%\include;%WXWIN%\msvc
library path(x86): %WXWIN%\lib\vc_lib
library path(x64): %WXWIN%\lib\vc_x64_lib
==== サンプルアプリケーションのビルド ====
以下の方法にて必要なサンプルのみをビルド/実行することができる。
- 「スタート」の「Visual Studio 2019」より「x86 Native Tools Command Prompt for VS 2019」または「x64 Native Tools Command Prompt for VS 2019」を起動して、以下のコマンドを入力する。
> cd %WXWIN%\samples
> nmake /f makefile.vc
サンプルアプリケーションの wxAUI デモの実行\\
{{:c_cpp:wxwidgets_on_vc2019_wxaui_demo.png?800|サンプルwxAUIデモ}}
=== 参考文献 ===
以下のサイトを参考にさせて頂きました。情報を公開して下さっている方々に感謝します。\\
[[http://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide|Microsoft Visual C++ Guide - WxWiki]]\\
[[http://freepg.fc2web.com/|フリープログラミング for windows.]]の[[http://freepg.fc2web.com/cpp/topic_wx_vc.html|Visual C++ Express EditionでwxWidgetsを使ってみる]]\\
[[http://codezine.jp/article/detail/553|簡単だけどつまづきやすいwxWidgetsの第一歩:CodeZine]]\\
===== Visual C++ 2008 Express Edition による開発 =====
==== アプリケーションのビルド環境設定 ====
=== インクルード ファイル 検索パスの設定 ===
- [ツール] メニューの [オプション] をクリックする。
- 「オプション」ダイアログボックスの [プロジェクトおよびソリューション] ノードを展開する。
- [VC++ ディレクトリ] プロパティ ページをクリックする。
- [ディレクトリを表示するプロジェクト]コンボボックスより[インクルード ファイル]を選択する。
- パスの一覧に **C:\Libraries\wxWidgets-2.8.9\include** および **C:\Libraries\wxWidgets-2.8.9\include\msvc** を追加する。\\ {{:c_cpp:wxwidget_vc2008_option_include_path.png?300|インクルード ファイルの設定}}
* **C:\Libraries\wxWidgets-2.8.9\**のパスは自分の環境に合わせて読み替えること。
=== ライブラリ ファイル 検索パスの設定 ===
- [ツール] メニューの [オプション] をクリックする。
- 「オプション」ダイアログボックスの [プロジェクトおよびソリューション] ノードを展開する。
- [VC++ ディレクトリ] プロパティ ページをクリックする。
- [ディレクトリを表示するプロジェクト]コンボボックスより[ライブラリ ファイル]を選択する。
- パスの一覧に **C:\Libraries\wxWidgets-2.8.9\lib\vc_lib** を追加する。\\ {{:c_cpp:wxwidget_vc2008_option_library_path.png?300|ライブラリ ファイルの設定}}
* **C:\Libraries\wxWidgets-2.8.9\**のパスは自分の環境に合わせて読み替えること。
==== プロジェクトの新規作成 ====
- [ファイル]メニューより[新規作成] - [プロジェクト]をクリックする。
- [新しいプロジェクト]ダイアログボックスで、[プロジェクトの種類]の[Visual C++] - [全般]フォルダを選択し、[テンプレート]より[空のプロジェクト]を選択する。\\ {{:c_cpp:wxwidget_vc2008_new_proj_01_empty_project.png?350|新しいプロジェクト}}
* プロジェクト名、場所、ソリューション名を必要に応じて修正する。
- [新しいプロジェクト]ダイアログボックスの[OK]ボタンをクリックする。
- プロジェクトを右クリックし[追加] - [新しい項目]をクリックする。必要に応じてヘッダ ファイル、ソース ファイル(必須)を追加する。
* **注意!!** __ソース ファイル(*.cpp)がないと、プロジェクトのプロパティ設定で、[構成プロパティ]ノードの[C/C++]プロパティページが表示されない__。
* [ヘッダー ファイル]を追加する。(ファイル名: xxxApp.h)\\ {{:c_cpp:wxwidget_vc2008_new_proj_03_header_add.png?300|ヘッダ、ソースの追加}}
* [C++ ファイル]を追加する。(ファイル名: xxxApp.cpp)
* ここまでの操作でソリューションは以下のようになる。\\ {{:c_cpp:wxwidget_vc2008_new_proj_04_sol_exp.png?200|ソリューション エクスプローラの状態}}
- プロジェクトを右クリックして[プロパティ]をクリックする。
- [構成プロパティ]ノードを展開して[全般]プロパティページを表示する。\\ {{:c_cpp:wxwidget_vc2008_new_proj_02_proj_prop_general.png?350|構成プロパティ(全般)}}
* 文字セット: 「**Unicode 文字セットを使用する**」を設定する。
- [構成プロパティ] - [C/C++]ノードを展開して、[プリプロセッサ]プロパティページを表示する。
* プリプロセッサ定義: **WIN32;_WINDOWS;_DEBUG;%%__WXMSW__%%;%%__WXDEBUG__%%** を設定する。
* **WIN32** - 必須
* **_WINDOWS** - 必須
* **_DEBUG** - デバッグを有効にする。
* **%%__WXMSW__%%** - 必須
* **%%__WXDEBUG__%%** - デバッグ ビルドされた wxWidgets をリンク。wxASSERT() などをアクティブ化。
* **WXUSINGDLL** - スタティック ライブラリの代わりに DLL を使用する場合に指定する。
* **wxUSE_GUI=1** - プロジェクトで GUI コンポーネントを使用する場合は指定する。(任意)
* **_CRT_SECURE_NO_DEPRECATE** -「この関数または変数は安全ではないかもしれない。」の警告を抑制する。
* **_CRT_NONSTDC_NO_DEPRECATE** - その他の警告を抑制する。
- [構成プロパティ] - [C/C++]ノードを展開して、[コード生成]プロパティページを表示する。
* ランタイム ライブラリ: **マルチスレッド デバッグ DLL** または **マルチスレッド DLL**
- [構成プロパティ] - [C/C++]ノードを展開して、[プリコンパイル済みヘッダー]プロパティページを表示する。
* プリコンパイル済みヘッダーの作成/使用: **プリコンパイル済みヘッダーを使用しない**
- [構成プロパティ] - [リンカ]ノードを展開して、[入力]プロパティページを表示する。
* 追加の依存ファイル: **wxmsw28ud_core.lib wxbase28ud.lib comctl32.lib rpcrt4.lib winmm.lib wsock32.lib**
* **wxmsw28[ud]_core.lib wxbase28[ud].lib** -
* **advapi32.lib comctl32.lib odbc32.lib rpcrt4.lib winmm.lib wsock32.lib** - wxWidgetsが必要とする。\\ advapi32.lib odbc32.lib は継承の値に含まれる。
*
- [構成プロパティ] - [リンカ]ノードを展開して、[システム]プロパティページを表示する。
* サブシステム: **Windows (/SUBSYSTEM:WINDOWS)**
- プロジェクトのプロパティ ダイアログを[OK]ボタンで閉じる。
参考文献:\\
[[http://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide|Microsoft Visual C++ Guide - WxWiki]]
===== トラブルシューティング =====
==== コンパイル時に「エラー: ‘wxOVERRIDE’ does not name a type; did you mean ‘wxEVT_IDLE’?」が発生する ====
古い wxWidgwts では wxOVERRIDE が未定義である為に発生する。\\
最新のライブラリを使えば問題は解決するが、自分で wxOVERRIDE を定義する事で回避可能でどのバージョンの wxWidgets でもコンパイルが可能になる。\\
sample.cpp:33:25: error: expected ';' at end of member declaration
virtual bool OnInit() wxOVERRIDE;
^
;
sample.cpp:33:27: error: 'wxOVERRIDE' does not name a type; did you mean 'wxEVT_IDLE'?
virtual bool OnInit() wxOVERRIDE;
^~~~~~~~~~
wxEVT_IDLE
エラーを回避するコードの例は以下のようになる。(wxWidgets/defs.hとほぼ同じ)
/* オーバーライドキーワードのサポートを確認する */
#ifndef HAVE_OVERRIDE
#if __cplusplus >= 201103L
/* すべての C++11 コンパイラはそれを持つべきです */
#define HAVE_OVERRIDE
#elif wxCHECK_VISUALC_VERSION(11)
/*
VC++ はバージョン8以降で override キーワードをサポートしていますが、C++11 の
サポートを示すものとして __cplusplus を定義していません(少なくとも 12 まで)ので、
その場合は特別に処理してください。
また、キーワードはサポートされていますが、バージョン 8、9、10 で使用すると C4481
コンパイラ警告 ("nonstandard extension used") が発生するため使用しないでください。
気にしないのであれば、この警告を無効にして HAVE_OVERRIDE を事前定義することができます。
*/
#define HAVE_OVERRIDE
#elif WX_HAS_CLANG_FEATURE(cxx_override_control)
#define HAVE_OVERRIDE
#endif
#ifdef HAVE_OVERRIDE
#define wxOVERRIDE override
#else /* !HAVE_OVERRIDE */
#define wxOVERRIDE
#endif /* HAVE_OVERRIDE */
#endif /* !HAVE_OVERRIDE */
[[https://github.com/wxWidgets/wxWidgets/blob/master/include/wx/defs.h|wxWidgets/defs.h at master · wxWidgets/wxWidgets · GitHub]]\\
===== 参考文献 =====
[[http://wiki.wxwidgets.org/Main_Page|Main Page - WxWiki]]\\
[[http://wiki.wxwidgets.org/Guides_%26_Tutorials#Setting_up_Your_IDE|Setting up Your IDE - WxWiki]]\\