facebook twitter hatena line google mixi email
★お気に入り追加


  • 1
  •  
  • 2010/04/09(金) 15:12:36
クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)についてのスレ。

本家
ttp://www.wxwidgets.org/
wxWindows日本語プロジェクト
ttp://wxwindowsjp.sourceforge.jp/
Cross-Platform Programming with wxWidgets
ttp://wxwidgets.info/
Let's wxWidgets
ttp://dot-gray.s33.xrea.com/
wxWindowsで始めるC++ GUIプログラミング
ttp://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
ttp://0xcc.net/pub/uu-2004-08/

前スレ
【GUI】wxWidgets(旧wxWindows) その4【サイザー】
http://pc12.2ch.net/test/read.cgi/tech/1214657360/

ここまで見た
  • 726
  •  
  • 2014/09/02(火) 19:04:52.66
パスが通ったところに互換性のない別バージョンのdllがあるんだろ。
mingwだとsjljとdw2の2種類あるから。

ここまで見た
  • 727
  •  
  • 2014/09/02(火) 19:56:42.14
MinGW/bin を

i686-pc-mingw32-g++ と MinGW/bin/g++ は別物らしくコンパイラのサイズ
(作ったプログラムのサイズではなく変換機のサイズ)がそもそも違う。

また、前者では、リンク段階で何もエラーを出さないが、
後者では、ちゃんと、_gxx_persolanity_v0 や _Unwind_Resume が
undefined reference というエラーになる。

ここまで見た
  • 728
  •  
  • 2014/09/02(火) 20:00:33.47
>>726
最初、xxx dw2 yyy.dll が見つからない、と言うメッセージ・ボックス
が出たのだが、そのdllを検索すると MinGW/bin にある事が分かって、
そこにパスを通したらそのメッセージ・ボックスは出なくなった。

その代わりに >>721 のメッセージ・ボックスが出るようになった。

ここまで見た
  • 729
  •  
  • 2014/09/02(火) 20:55:48.58
結論的に言うと、自分のローカルにMinGW32 の別バージョンが沢山あった。
サンプルのコンパイルに使われたのと同じMinGW32のbinだけをパスに
設定してからサンプルを起動すると実行できるようになった。
実行結果も問題ない。実行ファイルはstripするとサイズが小さくなったが、
>>691のライブラリをリンクした物よりも大きくなってしまった。

[wxStringを使った最小な cui program のサイズ]

>>691 のwxライブラリ使用時 : 451,584 bytes
 コンパイラは CodeBlocks付属のMinGW

・configureしたwxライブラリ使用時 : 547,342 bytes
 コンパイラは cygwinにインストールしたMinGW

[wxFrameを使った最小な gui program のサイズ]

>>691 のwxライブラリ使用時 : 1,611,264 bytes
 コンパイラは CodeBlocks付属のMinGW

なお、今回は、>>719-720 のような不具合を回避するため、RegExや、png,jpeg,tiff,zlib
などはconfigureで有効にしておいた。そうすると>>720の最初のヘッダファイル問題は
消えたので、何か良いことがあるかと思ったから。ただし、様子を見るとそれは必要なかった
かも知れない。サイズ縮小のためには disable にすべきかも。

ここまで見た
  • 730
  •  
  • 2014/09/02(火) 21:12:01.59
よかったな
-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
にすればlibstdc++とスタティックリンクできるかもな

ここまで見た
  • 731
  •  
  • 2014/09/02(火) 22:46:11.97
cygwin版のMinGWと、cmd.exe 版のMinGWって結構違うような気がしてきた。
Makefileなんかもcygwin版だと/cygdrive/c/xxx/yyy/zzz の形式になっている
のに対し cmd.exe版は c:\xxx\yyy\zzz になっているらしい。
また、コンパイラに -I 指定したパスなんかも同様の違いがあるらしく、
configureが作ったMakefileは、cygwin版MinGW用で、
cmd.exe版のMinGWでは、#inclde "wx/setup.h" のパスが探せなかったり
する。

build, host, target の指定は、全て mingw を指定していたのだから、
cygwinが入り込む余地は無かったはず。これは、configure.inか、
Makefileのどちらかを自前で修整する必要がありそう。

さらに、makeが(?)
process_begin: CreateProcess(NULL, sh xxxxxx, ...) failed.
というエラーを出すことがあり、その原因を探る必要もある。

ここまで見た
  • 732
  •  
  • 2014/09/02(火) 22:56:33.59
もう完璧にスレ違いだな

ここまで見た
  • 733
  •  
  • 2014/09/02(火) 22:56:38.09
cygwin版のMinGWと、cmd.exe 版のMinGWって結構違うような気がしてきた。
Makefileなんかもcygwin版だと/cygdrive/c/xxx/yyy/zzz の形式になっている
のに対し cmd.exe版は c:\xxx\yyy\zzz になっているらしい。
また、コンパイラに -I 指定したパスなんかも同様の違いがあるらしく、
configureが作ったMakefileは、cygwin版MinGW用で、
cmd.exe版のMinGWでは、#inclde "wx/setup.h" のパスが探せなかったり
する。

build, host, target の指定は、全て mingw を指定していたのだから、
cygwinが入り込む余地は無かったはず。これは、configure.inか、
Makefileのどちらかを自前で修整する必要がありそう。

Makfileの / を \ で置換して、/cygdrive/x/ を x:/ にしてみたら結構
行ける。途中、pch でファイルにアクセス拒否で書き込めないと言われるが、
もう一度 make すると、何事も無かったように続行する。

ここまで見た
  • 734
  •  
  • 2014/09/02(火) 22:57:58.06
>>732
wx アプリのサイズダウンの仕方関連なんだけど。

ここまで見た
  • 735
  •  
  • 2014/09/02(火) 23:40:17.26
作ったバイナリのサイズなんてwxWidgetsのビルド方法によって大きく変わるうえ、
最終的に使い物にならないライブラリの出来上がりとなるのが目に見えている
本当に必要なものだけを炙り出すつもりなら止めはしないが、どう考えても徒労でしかないと思うぞ

ここまで見た
  • 736
  •  
  • 2014/09/02(火) 23:47:28.37
正直wxWidgetsのバイナリサイズの話以外はほとんど既出だし
CygwinとMinGWの仕様の違い、クロスコンパイラのターゲット、configureの基本
それらの件に関しては自分のブログにでも書いていてほしい

ここまで見た
  • 737
  •  
  • 2014/09/02(火) 23:54:47.98
まあ一応上から目線でコメントしとくと

>>725
libgccの存在に関して勉強不足、>>726の言うとおりdllの種別が2種類ある
DLLにするよりもlibgccだけスタティックリンクしたほうがいいが、libtoolにかませるのが
割と面倒なので一緒に配布したほうが楽、まぜこぜにするとか初心者くさい

>>727
クロスコンパイラとネイティブコンパイラを混同している

>>731
もうネット上で一万回は言及されたであろうCygwinとMinGWのファイルパスについて
述べているが無駄なのでやめてほしい、てか環境を混ぜるな

ここまで見た
  • 738
  •  
  • 2014/09/03(水) 00:12:32.54
>>737
最後の段落について。

・cygwin版のMinGW ---> ファイル名はUnixライクな /cygdrive/c/xxx/yyy/zzz 形式だが、
             出来た実行ファイルはcygwinが無くても動作する。
             ユーザー・プログラムからは主にWin32 APIを使う。

・cmd.exe版のMinGW ---> 何もかも Windows 用。ファイル名もDOS式、
             出来た実行ファイルは Windows のみで動作。
             ユーザー・プログラムからは Win32 API を使う。

・cygwinのgcc    ---> cygwin環境で動く実行ファイルを作成する。
             ユーザー・プログラムからはUnix系関数を使う。

ここまで見た
  • 739
  •  
  • 2014/09/03(水) 00:20:01.40
>>738
スレ違いだ、こっちでやれ
Cygwin + MinGW + GCC 相談室 Part 7
http://peace.2ch.net/test/read.cgi/tech/1357019230/

あとMinGWはcmd.exeではなくminttyから使うべきだ
さっさとネットで資料を探す作業に戻るんだな

ここまで見た
  • 740
  •  
  • 2014/09/03(水) 00:37:00.57
ちなみに c:\cygwin\bin と c:\cygwin\usr\local\bin にパスを通せば、
cmd.exe からでも cygwin のコマンドが実行できるようになる。
gccもlsもmakeも。ここでbashを起動すればcygwin環境になる。

ここまで見た
  • 741
  •  
  • 2014/09/03(水) 08:47:34.91
久しぶりに2ちゃん観に来たら
wxのスレめっちゃ野比てて嬉しい

ここまで見た
  • 742
  •  
  • 2014/09/03(水) 14:50:56.74
wx のソースを修正したら、wxString() を使った最小サンプルが、
静的リンクしても 70KB で済むようになった。

PATHには、MInGW/bin しか設定せずにテストしているので、wx の DLL
がリンクされている可能性は無く、間違いなくスタンド・アローンの
プログラム。

ちなみに、wx のソースを修正しなければ、451,584 バイトになってしまう。
>>729 に書いたものとほぼ同じプログラムだから。

ここまで見た
  • 743
  •  
  • 2014/09/03(水) 15:05:09.35
wxというよりgccとライブラリのお話で伸びている

ここまで見た
  • 744
  •  
  • 2014/09/03(水) 16:58:33.04
>>742
dllの依存関係すらまともに調べられないのか
dependency walkerとかobjdumpとか使え

ここまで見た
  • 745
  •  
  • 2014/09/03(水) 17:02:39.87
mingw入ってるならlddコマンドでもいける>依存動的ライブラリ

ここまで見た
  • 746
  •  
  • 2014/09/03(水) 18:30:34.52
ただ、パス設定を空にして起動できるかどうか見るのも1つの確実な方法。

ここまで見た
  • 747
  •  
  • 2014/09/04(木) 03:37:02.91
性格悪いな。
コンピュータ・ソフト関連の人って。

ここまで見た
  • 748
  •  
  • 2014/09/04(木) 17:23:39.03
GUIアプリのサイズ縮小を試みていたが、断念するかも知れない。

ここまで見た
  • 749
  •  
  • 2014/09/04(木) 18:46:24.22
△性格が悪い
○無駄が嫌い
◎無駄な事をしてる奴が嫌い

ここまで見た
  • 750
  •  
  • 2014/09/05(金) 15:14:57.29
>>749
何も悪いことをせず、自分にも害を与えない人を嫌うのが性格が悪いんだよ。

ここまで見た
  • 751
  •  
  • 2014/09/05(金) 15:46:20.79
公園の蚊を駆除するのに外側からじゃなくて内側から始めるとかが無駄
自分にも危害が及ぶので嫌

ここまで見た
  • 752
  •  
  • 2014/09/05(金) 17:37:07.79
>>749>>750
言われた側が一方的に立場が悪くなるという効能は興味深いと思う
言ったもん勝ちという現象は絶対にあるのだ
>>751
生死にかかわる難しい判断を
「無駄なこと」に無理やりおしこめた詭弁
物事を矮小化させる効果もある

ここまで見た
  • 753
  •  
  • 2014/09/05(金) 18:18:43.88
>>751
正直言って、今回のこととの関連も分からない。
それ以前に外側から、内側から、ということの意味が全く分からない。
まるで会話ロボットが生成した文書のようだ。

>>752
この文書も意味不明。人間が書いたとは思えない全く理解できない文書だ。

ここまで見た
  • 754
  •  
  • 2014/09/05(金) 22:33:12.96
俺の大好きなwxWidgetsスレがめちゃんこ糞スレになって泣きそう

ここまで見た
  • 755
  •  
  • 2014/09/05(金) 22:52:37.72
案の定あらし化したか
これ以上触れないで放っとくの推奨

ここまで見た
  • 756
  •  
  • 2014/09/10(水) 10:22:55.86
wxWidgets って、GTK をバックエンド(port to)に使うことも出来るらしい
ね(wxGTK)。

上位のツールキットが、下位のツールキットに被さっているってことか。

X11 を直接バックエンドに使うのともまた違うのかな?

ここまで見た
  • 757
  •  
  • 2014/09/10(水) 18:37:52.75
      \       ヽ           |        /        /
          \      ヽ               /      /
‐、、         殺 伐 と し た ス レ に 鳥 取 県 が ! !      _,,−''
  `−、、                  __/\            _,,−''
      `−、、              _|    `〜┐         _,,−''
                      _ノ       ∫
                  _,.〜’        /
───────‐     ,「~             ノ    ───────‐
               ,/              ` ̄7
                |     島 根 県     /
           _,,−'   ~`⌒^7            /    `−、、
        _,,−''            丿            \,      `−、、
 ,'´\           /  _7       /`⌒ーへ_,._⊃         /`i
 !   \       _,,-┐    \    _,.,ノ          r‐-、、      /   !
 ゙、   `ー--<´   /      L. ,〜’             ゙、  >−一'′   ,'
  y'  U      `ヽ/     /            ヽ      ヽ '´     U   イ
                                ____
         /      __        |       \____\
    ___/__ / ̄    ____|____ \ \____\
       //ヽ   /___         /|\       \ \____\
     / / ヽ  / /__     /  |  \       \_______
   /  /   / /   /     /    |    \          |    \
  /   /  / /  _/   __/      |      \__      |     \  ̄―_

ここまで見た
  • 758
  •  
  • 2014/09/11(木) 00:33:29.51
>>756
X11は組み込み向けのportなので一般的には使われないよ(メンテされてるかもよくわからん)
Linuxでの使用の際はGTKベースと思っていた方がいい
つまりwxWidgetsのクラスやメソッドでコードを書いてLinux上でビルドするとGTKアプリができる

最近はwxQtというwxWidgetsからQtをバンドルするイカれたプロジェクトが本流にマージされたようだが…

ここまで見た
  • 759
  •  
  • 2014/09/11(木) 07:34:16.28
wxQtってなんかメリットあるの?

ここまで見た
  • 760
  •  
  • 2014/09/11(木) 20:49:49.06
>>759
目的は、Qtベースのデスクトップ(KDE)でもwxWidgetsアプリを使うためとか
(→まあKDE上でGNOMEアプリを使うツールもあった気がするのだが…)
あとQtをバンドルすることでAndroid対応も果たしていた(実用性は不明)

ここまで見た
  • 761
  •  
  • 2014/09/12(金) 10:47:54.87
wxWidgetsで、POPUP Menu (Windows では、Context Menu が正式名称かも)を作る場合、
どうしてますか?

特に、CodeBlocksなどのIDEで行う場合の最良の作法が知りたいです。
自分は、基本的な wxSmith の使い方が分かったところです。

ここまで見た
  • 762
  •  
  • 2014/09/12(金) 11:29:17.36
MenuItem作って
SubMenu作って
AddItem

ここまで見た
  • 763
  •  
  • 2014/09/12(金) 11:47:23.49
>>762
それは手作業の場合ですよね。
そこの部分は対した手間ではないですが、
イベント・ハンドラを*.cpp, *.h, EVENT_TABLEの全てに書くのが面倒で。

ここまで見た
  • 764
  •  
  • 2014/09/12(金) 11:47:52.57
どうぞ
https://www.youtube.com/watch?v=jCW7DZ6gdAo


ここまで見た
  • 765
  •  
  • 2014/09/12(金) 12:20:43.41
>>764
これ、今ちょうど数秒前に見終わったところだった。

これ見てると、

1. wxSmithでwxFormをエディット中に、「MenuBar」ではなく「Menu」ボタンを押して
 「要素」を追加する。
  そうするとwxSmithの上辺に要素のアイコンが並んでいる末尾に新しいアイコンが追加される。
2. 追加したMenu要素に名前を付ける。
3. wxFormの中に既に配置してあったwxPanelに対して、マウス右UPイベントに対応するハンドラを追加する。
4. そのハンドラの中に、手作業で PopupMenu()関数の関数呼び出しを書き、
  その引数に2.でMenuに付けおいた名前を書く。

こここまでは大した手間じゃない。

その後が問題で、EVENT_TABLE の「自動的にwxSmith が作成する範囲」の外側(直後)に、
POPUP MENUのMENU項目数分だけ、手作業で Connect() 関数を書いている。メニュー項目が7個だと、
Connect()関数も7個書く。それぞれ、MENU項目に付けた ID_xxxx の値と、対応する自前の
イベント・ハンドラの関数名を引数に指定して。


最後の部分が知りたかった事で、POPUP MENUの作り方としてはかなり面倒な方法に属する。

ここまで見た
  • 766
  •  
  • 2014/09/12(金) 12:28:57.27
馬鹿には無理

ここまで見た
  • 767
  •  
  • 2014/09/12(金) 14:27:34.99
7個のメニュー項目にイベント結びつけるのに7行コード書くのって、そんな突出して面倒か?

ここまで見た
  • 768
  •  
  • 2014/09/12(金) 15:27:57.79
>>767
それは、「EVENT_TABLE」の箇所だけの話で、実際は、*.h に
メンバ関数宣言を7つ書き、*.cpp に
Zzzz Ccccc::OnXxxxx( Yyyy *pYyyy )
{
return Qqqqq;
}
みたいなの(4行)を 7 つ書く必要がある。

少なくとも (1+1+4)*7 = 42 行だ。

ここまで見た
  • 769
  •  
  • 2014/09/12(金) 16:36:39.60
IBみたいなのを期待したら駄目

ここまで見た
  • 770
  •  
  • 2014/09/12(金) 19:11:10.85
なんで今更wxSmithなんだよ古臭いな
なんでイベントテーブル使ってんだよ古臭いな
黙ってwxFormBuilder使ってみろよメッチャ簡単で笑えるぞ

ここまで見た
  • 771
  •  
  • 2014/09/12(金) 19:15:42.12
>>770
IDEとの組み合わせは?

IDEがサポートしていなくてもいけるんだろうか?

ここまで見た
  • 772
  •  
  • 2014/09/12(金) 19:26:00.24
>>771
ちんまい個人用ツールしか作った事が無いから大規模プログラムでどうなるかは分からんが、
俺はwxFormBuilderでGUIデザインし、VisualStudioでコード書いてる。
GUI部品を追加したくなったら、いつでも追加編集できる。
もちろんイベント追加も問題ない。
VSでコード書きつつGUIエディットしても、VSにフォーカスを移したら勝手に読み込み直してくれる。

今まで書いたコードがGUI生成時に消去される事も無い。
これにはちょっと条件があるけどな。

ここまで見た
  • 773
  •  
  • 2014/09/12(金) 19:30:56.63
>>772
POPUP MENU を作る時、EVENT_TABLE を使わずに何か良い方法で
やってくれるのかな?

ここまで見た
  • 774
  •  
  • 2014/09/12(金) 19:38:30.73
wxFormBuilderかあ
もはやクロスプラットフォームでGUIがGUIでデザインできるのか(しかもフリーソフトウェア)

ここまで見た
  • 775
  •  
  • 2014/09/12(金) 19:39:02.29
VSは、外部エディタでソースを編集した場合、VSに戻ると自動的に再ロード
してくれる機能がある事は知ってる。これは昔からある機能。

ここまで見た
  • 776
  •  
  • 2014/09/12(金) 20:52:41.52
>>773
凝りに凝ったメニューは知らんが、ポップアップメニューの作成および
メニュークリック時のイベント生成なんかは全部wxFormBuilder上で出来る。
従来のイベントテーブルでも生成してくれるし、Connect関数を使ったイベント生成も出来る。
今はConnectも古くてBindがトレンドらしいが、詳しくは知らない。

http://www.dotup.org/uploda/www.dotup.org5309542.zip.html
参考までに、wxFormBuilderのみで作ったサンプルコードを添付する。
自分で書いたのはmain.cppとthis->Close();だけ。
VS2013 + wxWidget3.0.1でビルド確認済。

フリックゾンビ
フリックゾンビ
ここまで見た

★お気に入り追加

このページを共有する
facebook twitter hatena line google mixi email
おすすめワード