- 1 名前:デフォルトの名無しさん mailto:sage [2010/04/09(金) 15:12:36 .net]
- クロスプラットフォーム 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【サイザー】 pc12.2ch.net/test/read.cgi/tech/1214657360/
- 602 名前:デフォルトの名無しさん [2014/01/27(月) 14:20:14.73 .net]
- 了解
- 603 名前:デフォルトの名無しさん mailto:sage [2014/01/27(月) 14:35:57.41 .net]
- >>601 です。 >>596 について進展したので参考になればと思い報告します。
メニューアイテムの上で右クリックしてポップアップメニューを表示することが可能なクラスが wxPython にありました。 wx.lib.agw.flatmenu がまさにぴったりのクラスでした。 RIGHT_UP のイベントはありませんが、 FlatMenuItem::SetContextMenu(FlatMenu) で >>596 でしたいことが簡単にできます。 自作のために PopupWindow あたりを調べているときに見つけました。 また何かありましたらよろしくお願いします。
- 604 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 17:32:22.79 .net]
- サンプルが多すぎて逆にわからないのですが、
ランタイム時にGUIパーツを生成消滅させることって可能ですよね? 例えばユーザが読み込んだファイルによってボタンの数を変化させるなど
- 605 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 17:48:08.47 .net]
- マジレスすると
出来ますよ
- 606 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:02:12.58 .net]
- ありがとうございます
関連するサンプルなどありましたら教えていただけると幸いです
- 607 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:06:08.80 .net]
- きっと君のHDD(SSD)に既に入ってるよω
- 608 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:19:55.82 .net]
- そうなんですよね〜でもsample多くてどっから見ればよいか、という感じです
まあできるということがわかればとりあえず見て回ります
- 609 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:34:00.97 .net]
- チュートリアルで最初の方から見ればすぐ出ると思う。
- 610 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:38:10.36 .net]
- デモ実行してみて自分の欲しい機能と似たものを見つけたら「ソースを見る」をクリック。
- 611 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:44:29.66 .net]
- すいません、見てるものが違うかもしれないので確認させてください
チュートリアルとは何を指してますか? デモはdemosフォルダの中にあるプロジェクトですよね?「ソースを見る」とはなんでしょうか?
- 612 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:48:03.88 .net]
- ごめん。
見てるものが違った。 wxPython の方見てた。
- 613 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 18:53:20.95 .net]
- wxPythonのDemo見て目星を付けて
wxPythonのソースを参考にwxWidgetsでCソース書くのもあり
- 614 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 19:08:22.51 .net]
- なるほど
wxPythonでコードを書いたものがC++に直接変換できたりしたら便利ですね wxGladeみたいに
- 615 名前:デフォルトの名無しさん [2014/02/26(水) 20:20:43.75 .net]
- なんか久しぶりにwxスレが伸びてるぞ、新規ユーザー大歓迎
ボタンとかテキストエリアの動的な生成は、wxPanelとかwxSizerを使った簡単なサンプルを作ったら理解できると思う 言葉で説明するよりコード書いたほうがよいけど一応書いとく 例えばボタンを生成・削除しようとする場合 親Panelをparent, 子panelをchildとすると 1. ウィジェットの生成:parentをnewして、必要な分だけchildをnew child = new wxPanel(parent, …); ... 2. ウィジェットの削除:parent.DestoryChildren(); この関数で子ウィジェットを全部きれいに削除できる 説明の意味がわからなければ、まずは適当なチュートリアルサイトに行くべし おすすめ zetcode.com/gui/wxwidgets/
- 616 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 20:22:35.51 .net]
- >>614
慣れたら直接C++で書けるから多分コンバータは需要無いよ
- 617 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 20:29:50.32 .net]
- >>615
詳しくありがとうございます 拝見致します >>616 wxGladeも要りませんかね? フローはwxGladeで枠を作って機能をC++で書く感じになるのかと
- 618 名前:デフォルトの名無しさん mailto:sage [2014/02/26(水) 20:30:17.32 .net]
- そのくらい wx は良く出来てるね。
- 619 名前:デフォルトの名無しさん mailto:sage [2014/02/28(金) 21:18:50.52 .net]
- Qt以下の品質。gtkならcで書けた。
- 620 名前:デフォルトの名無しさん [2014/03/01(土) 00:37:16.59 .net]
- そらQtのほうがメジャーやろ、死ね
- 621 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:40:12.84 .net]
- どっちも1992年頃にできた。OSSといえども商業的な成功がコミュニティ形成の鍵。
それ以外はGood Oldを懐かしむロートルか宗教的価値観に支えられているだけ。
- 622 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 01:51:22.19 .net]
- GUI比較スレってなんだよね・・・
比較的な話ってここで展開してもよいものやら というかwxWidgetとQtどっちも使ってる人っているのか
- 623 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 02:28:31.91 .net]
- 世の中のアプリケーションはQtかAwt/Swingが採用される流れ。
直交性ならgtk。サクッと安定したものを書くならtk。 トイプログラムならSDL+OpenGL。生きるとは残酷なことである。
- 624 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 12:13:44.67 .net]
- バイナリサイズでかいですな
VC2010でサイズ最適化オプションかけてもHelloWorldで5MB... これはもうどうしようもない感じ?
- 625 名前:デフォルトの名無しさん [2014/03/01(土) 12:23:48.03 .net]
- どうしようもないっす
ベース部分(wxStringとかwxWindowとか)の定義が容量食ってるから?ではないかという疑惑
- 626 名前:デフォルトの名無しさん mailto:sage [2014/03/01(土) 12:27:18.78 .net]
- うーんなるほど
ランタイムで色々判断出来るような設計なんですかねえ
- 627 名前:デフォルトの名無しさん [2014/03/01(土) 12:32:32.69 .net]
- そうですねwxWidgetsはRTTIの仕組みが活かされてるみたいなドキュメントはどっかで見た
たぶんwxWidgetsの中核であるwxWindowクラスはそんなんばっかしなんだろう
- 628 名前:デフォルトの名無しさん mailto:sage [2014/03/05(水) 12:40:46.24 .net]
- ファイル操作系が異様にやりにくい
wxString dir_name("some directly name"); dir_name.Traverse(some_traverser,wxString(""),flags); でディレクトリたどりながらファイル抽出できるかなとおもったが flags = wxDIR_FILES だとそのディレクトリの中身”のみ”探す flags = wxDIR_DIRS だとその下の”全ての”階層のディレクトリを抽出する wxDIR_DEFAULT だとその下の”すべての”ファイルを探す なんでこんな仕様なんだ
- 629 名前:デフォルトの名無しさん mailto:sage [2014/03/05(水) 12:45:32.18 .net]
- ああわかった
ディレクトリが見つかった場合のみその下も探す、ということなんだな するとファイルのみだと当然下なんぞ無いからそれ以下を探すことはなく ディレクトリのみ、とすると下にもいけるから最下層まで探そうとするわけか うーん
- 630 名前:デフォルトの名無しさん mailto:sage [2014/03/05(水) 12:55:52.46 .net]
- 連投失礼
Traverserクラスを継承してそのOnDir関数の返り値で制御すればいいということでした
- 631 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 15:51:27.09 .net]
- 浮動小数点を扱えるsliderってデフォルトではなさそうですか?
- 632 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 17:23:40.57 .net]
- たとえば 0 - 100 を 10 で割ると
0.0 - 10.0 のレンジになります
- 633 名前:デフォルトの名無しさん mailto:sage [2014/03/11(火) 17:30:20.25 .net]
- やっぱそんな感じなんすね
最大値最小値現在値ラベル表示が便利だなーとおもったんですが、小数点付きでやろうと思ったら 自分でラベル付けるしかなさそうですね
- 634 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 21:45:40.12 ID:w4oGcJBI.net]
- 右側のボタンを押したら左側のパネルを再描写させたい、など
あるイベントから(親でない)ほかのイベントを誘発させたい時ってあると思うのですが その辺に関する記事てどっかにあります?
- 635 名前:デフォルトの名無しさん [2014/03/15(土) 23:13:55.37 ID:eHN/5w2/.net]
- >>634
そのへんはイベント処理の領域になりますね wxWiki見るしかない感じ イメージとしては Sample::LeftPanelRedraw(wxCommandEvent& event); というイベント関数のIDがID_LeftPanelRedrawであった場合 そのイベントは wxCommandEvent e(wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, ID_LeftPanelRedraw)); LeftPanelRedraw(e); で呼べる
- 636 名前:デフォルトの名無しさん mailto:sage [2014/03/15(土) 23:39:19.87 ID:w4oGcJBI.net]
- >>635
了解です、参考にさせていただきます
- 637 名前:デフォルトの名無しさん mailto:sage [2014/03/21(金) 12:58:58.01 ID:hjbpSh7I.net]
- わかりました
wxWindowBase::wCaptureMouse()を呼び出すと以降座標とイベントが取得されるようです
- 638 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 17:51:04.60 ID:cY3NJQQl.net]
- はい。知ってますよ。
- 639 名前:デフォルトの名無しさん mailto:sage [2014/03/23(日) 19:26:21.87 ID:0loqh5rV.net]
- いや、知らないです
- 640 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 21:36:09.61 ID:d288LkW9.net]
- クロスプラットフォームの開発環境について調べてるんですが、wxWidgetsの
GUIは外観とかは各プラットフォームのものが使われるんですか?それとも 独自のテーマになってしまうんでしょうか?
- 641 名前:デフォルトの名無しさん [2014/05/12(月) 21:48:19.14 ID:N4i3m2/R.net]
- >>640
各プラットフォームのものが使われます つまりWindowsならWIN32、LinuxならGTK、MacならCocoa それぞれの外観になります 対してQtやTk、JavaのSwingなどは独自のテーマになります
- 642 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 21:58:07.29 ID:KhXbSVtN.net]
- Qtってそうだったんだ
- 643 名前:デフォルトの名無しさん mailto:sage [2014/05/12(月) 22:57:11.37 ID:d288LkW9.net]
- >>641
ありがとうございます。他の環境まで概括してくださるとは助かりました。
- 644 名前:デフォルトの名無しさん mailto:sage [2014/05/13(火) 02:25:29.32 ID:mUTDx2p/.net]
- >>640
敢えてプラットフォームのを使わず テーマ選ぶ方法もあったはず
- 645 名前:デフォルトの名無しさん mailto:sage [2014/05/23(金) 01:42:23.54 ID:NdcsMWjh.net]
- wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、
wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。 これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。
- 646 名前:デフォルトの名無しさん [2014/06/03(火) 09:02:12.18 ID:va6vQ78Z.net]
- Swiftスレ
peace.2ch.net/test/read.cgi/tech/1401736341/
- 647 名前:デフォルトの名無しさん mailto:sage [2014/06/04(水) 21:33:25.19 ID:EBZlr/6D.net]
- いまこのスレ開いたら、>>645にあったはずの有益な書き込みが消えている…
貼っておこう > 646 名前:デフォルトの名無しさん [sage]: 2014/05/23(金) 01:42:23.54 ID:NdcsMWjh > wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、 > wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。 > これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。
- 648 名前:デフォルトの名無しさん mailto:sage [2014/06/05(木) 01:15:41.59 ID:/T91KtMA.net]
- なんと、板移転したときに消えたのかもしれないね。
- 649 名前:デフォルトの名無しさん mailto:sage [2014/06/19(木) 12:54:27.42 ID:sMGAuaVR.net]
- wxWidgetsを使って作られたプログラムの一覧ってあったりするのかね?
とりあえずAudacityは知ってる
- 650 名前:デフォルトの名無しさん mailto:sage [2014/06/19(木) 19:37:20.57 ID:Brdb8B0I.net]
- www.wxwidgets.org/about/screenshots/
とか
- 651 名前:デフォルトの名無しさん mailto:sage [2014/06/19(木) 19:41:04.43 ID:sMGAuaVR.net]
- おーありがとう
後で見て回る テンプレにあってもいいじゃないかな?
- 652 名前:デフォルトの名無しさん mailto:sage [2014/06/19(木) 20:07:59.88 ID:gduOxxnf.net]
- 車の再発見
- 653 名前:デフォルトの名無しさん mailto:sage [2014/06/19(木) 22:56:02.45 ID:Brdb8B0I.net]
- 商用アプリは
wiki.wxwidgets.org/Commercial_applications_using_wxWidgets
- 654 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 15:57:43.03 ID:TAUePqVhc]
- >>644
そんなんあったっけ?
- 655 名前:デフォルトの名無しさん mailto:sage [2014/08/24(日) 18:20:53.22 ID:Gtnn2j9y.net]
- wxWidgetsで、フォームを閉じる処理をして実際に閉じるまでの間に発生するイベントとかある?
.NETで言うところのOnClosingみたいな感じで。
- 656 名前:デフォルトの名無しさん [2014/08/25(月) 02:12:21.61 ID:OTL7uAT+.net]
- OnClose
OnVeto
- 657 名前:デフォルトの名無しさん mailto:sage [2014/08/25(月) 14:23:49.85 ID:IQl9g11m.net]
- >>656
d おかげで作業が進みました。
- 658 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 17:09:00.43 ID:QEgdFK7f.net]
- Windows で、
CrossBlock + MinGW + wxWidget で最も簡単な GUI アプリを基本プロジェクトで作成してみたところ、 MyTest.exe のサイズ:736KB (wxWidgetのDLL) wxmsw28u_gcc_custom.dll のサイズ : 15.9MB MyTest.exe のメモリ使用量 : 7,732KB // TaskManagerの表示 となった。 この基本アプリは、HelpでAboutでメッセージ・ボックスが表示できる ようになっているが、メニュー項目をクリックしてから実際にそれが 出るまで数秒かかる。実験したのはそこそこ速いマシンと速いWindows での事。
- 659 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 17:09:45.00 ID:QEgdFK7f.net]
- ただし、遅いのは最初の一回だけ。
一度でも表示すると後は速い。
- 660 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 17:56:51.72 ID:QEgdFK7f.net]
- Mailer の Thunderbird-Portable なんかもマルチプラットフォーム対応
だけど、起動がかなり遅い。これも巨大な dll を読み込んだりしてる からかな。 起動やメニュー操作が遅くなるのはマルチプラットフォーム化する代償 として負わされるのかも知れん。 こういうツールキットで軽快なアプリを作るのは難しいのかもな。
- 661 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 19:14:34.45 ID:OmJCXozv.net]
- 小規模の自作ソフトでwxWidgetsをスタティックリンクしない理由が分からん
わざわざ合計バイナリサイズを大きく、速度も遅くする理由がどこにあるのだろう
- 662 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 21:27:38.25 ID:QEgdFK7f.net]
- >>661
なるほど、スタティックリンクにすれば、起動後になってからユーザーの 命令に対する応答が遅れる事はなくなるかもしれない。 起動が遅くなるだけで済むんなら、そっちの方がストレスが少ないかも。
- 663 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 21:50:56.10 ID:JtVIC4MG.net]
- ある程度規模が大きくなるとスタティックリンクだと初回起動が遅すぎになので
dllにモジュールを分割してやったほうがいい 起動時のメモリへのロード時間はどうしようもないのでスプラッシュをつけてごまかす
- 664 名前:デフォルトの名無しさん mailto:sage [2014/08/26(火) 22:39:34.76 ID:QEgdFK7f.net]
- CrossBlockでは、monolithic タイプのライブラリをビルドしてから使う
ようになってるんだけど、それも遅い原因なのかな。 でも起動後にユーザー入力に対するレスポンスが遅いのはどう説明すれば いいんだろう? 普通の Windows の仕様だと原則、起動時に全ての DLL をロードする。 LoadLibrary()を使えば動的にロードすることも可能は可能だけど、 それをする必要は旧OSでサポートしてなかった新OSのDLLをロードする ような場合は、多言語化のサポートなど。 なるほど、多言語化のせいかも。_("xxx") みたいなのがあったから、 gettext を使ってる。それでリソースを動的ロードしているのか。
- 665 名前:デフォルトの名無しさん mailto:sage [2014/08/27(水) 04:40:25.51 ID:IfBPvyzm.net]
- 何度かアプリ起動しているうちにWindowsのFetchが学習してくれて
DLLとか先読みしてくれるようにならないのだろうか
- 666 名前:デフォルトの名無しさん mailto:sage [2014/08/27(水) 06:47:58.33 ID:J2peHUgZ.net]
- >>665
それはなる。 ・ディスクの内容は、メモリにキャッシュされる。 ・同じDLLは、全てのアプリで物理メモリが共有されると聞いたことがある。 # >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。 それより、wxWidget 本家のソース配布に入っている samples を Windows の mingw32 でビルドしてみたところ、全然遅くなかった。 ・アプリの起動は速い。 ・起動後のメニューコマンドやユーザー入力に対するレスポンスも速い。 ・Aboutダイアログも瞬間ではないが、0.3秒程度で、Windows Nativeアプリ でも、その程度の遅さはある場合があるので遜色ない。 CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な ライブラリを使用しているからか。
- 667 名前:デフォルトの名無しさん mailto:sage [2014/08/27(水) 07:54:18.52 ID:X38Kg7Ty.net]
- >>666
># >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。 なんだと思ったらわりと素人じゃねえかおい >CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な >ライブラリを使用しているからか。 monolithicってのはwxWidgetsのモジュール全部入りのDLL作るという意味なので遅くて当然 (実際試したことないので遅いというのは初めて知ったが…) 普通は ./configure --prefix=/mingw --enable-shared みたいに指定してビルドするから モジュールごとに分割されたDLLが作成される Windows上で開発する時はMinGW + NTEmacs/eclipse CDTの環境がおすすめ
- 668 名前:デフォルトの名無しさん mailto:sage [2014/08/27(水) 09:58:52.27 ID:J2peHUgZ.net]
- >>667
最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、 configure は使えない気がする。 CodeBlocks のQuickなんたらRefの説明では、いきなり、 make するように支持されていた。しかも、-fno なんたら dll-export みたいなオプションを付けろと指示。これは、MinGW32のバグで、 付けないと最後のldの段階でldがクラッシュする事をたまたま発見。 ところで話は変わって聞いておきたいのですが、 eclipse では wxWidget のイベントを書くようなときに ・BEGIN_EVENT_MAP に自動的に一行マクロを挿入してくれて ・*.h にもメンバ関数宣言を書いてくれて ・*.cpp にも5行くらいの関数定義本体の雛形を書いてくれ たりしますか?
- 669 名前:デフォルトの名無しさん mailto:sage [2014/08/27(水) 10:01:06.29 ID:J2peHUgZ.net]
- つまり、イベント・ハンドラを追加したとき、
BEGIN_EVENT_TABLE(wxListMainWindow,wxScrolledWindow) EVT_PAINT (wxListMainWindow::OnPaint) EVT_MOUSE_EVENTS (wxListMainWindow::OnMouse) EVT_CHAR (wxListMainWindow::OnChar) EVT_KEY_DOWN (wxListMainWindow::OnKeyDown) EVT_KEY_UP (wxListMainWindow::OnKeyUp) EVT_SET_FOCUS (wxListMainWindow::OnSetFocus) EVT_KILL_FOCUS (wxListMainWindow::OnKillFocus) EVT_SCROLLWIN (wxListMainWindow::OnScroll) EVT_CHILD_FOCUS (wxListMainWindow::OnChildFocus) END_EVENT_TABLE() とか、クラスを書くとき IMPLEMENT_DYNAMIC_CLASS(wxListMainWindow,wxScrolledWindow) 見たいなものの自動生成があるとうれしいんですが、そういう IDE はありません?
- 670 名前:デフォルトの名無しさん mailto:sage [2014/08/29(金) 11:13:03.59 ID:AEJEOYpd.net]
- wxWidgetsの問題点の1つは、プログラムのサイズが大きくなる事。
特に静的リンクしたときに顕著。 Windows は、VC++ にて、 ac1rd: CUI の Win32 と printf() を使ったもののリリース・動的リンク版が 16KB程度。 puts() を使えばもっと小さく出来る。 ac1rs: CUI の Win32 と printf() を使ったもののリリース・静的リンク版が 40KB程度。 puts() を使えばもっと小さく出来る。 ag2rd: GUI の MFC の 基本的な MDI アプリがリリース・動的リンク版で 36 KB 程度。 ag2rs: GUI の MFC の 基本的な MDI アプリがリリース・静的リンク版で 332 KB 程度。 wxWidgets 2.8.12 の samples では、 bc1rd: CUI の console.exe がリリース・動的リンク版で 138KB bc1rs: CUI の console.exe がリリース・静的リンク版で 863KB bc1dd: CUI の console.exe がデバッグ・動的リンク版で 184KB bg2rd: GUI の keyboard.exe がリリース・動的リンク版で 293KB bg2rs: GUI の keyboard.exe がリリース・静的リンク版で 2,924KB bg2dd: GUI の keyboard.exe がデバッグ・動的リンク版で 492KB ただし、bc1xx は、アプリ本体のプログラムが複雑なことをしているようなので、 もっと小さく出来る可能性があり。
- 671 名前:デフォルトの名無しさん mailto:sage [2014/08/29(金) 19:04:31.75 ID:GS9LyL7J.net]
- その説明にac1だの何だの自分以外分からない定義を使う必要があったのだろうか
- 672 名前:デフォルトの名無しさん mailto:sage [2014/08/29(金) 19:07:59.00 ID:AEJEOYpd.net]
- 今から見るとそうかも。
a: Windows Native or MFC b: wzWidgets c: CUI g: GUI r:release, d:debug d:dynamic link, s:static link
- 673 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 00:17:55.46 ID:S/CtHe8u.net]
- >>668
>最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、 >configure は使えない気がする。 なにいってんだCodeBlocksのドキュメントにそう書いてあるだけで 基本autotoolsで作られたソースはconfigureでビルドできるぞ 実際自分はWindows上のmingw32/64、LinuxのクロスビルドからのMinGWでconfigure使ってる なぜMakefileでやれという指示なのかというと、そのほうが簡潔で保守しやすいからだ あとGNU MakeじゃないMakeでもビルドできるようにしたいとかいう微妙なこだわりが有る場合も有る >>669 エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける ソースのひな形自動生成機能は知らんなあ
- 674 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 00:21:29.81 ID:S/CtHe8u.net]
- >>670
MinGWビルドでバイナリをストリップしたやつとか比較しないのか
- 675 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 07:56:49.02 ID:pUv0T+7B.net]
- >>674
Stripに詳しくないので、言っている意味が分からない。 Stripって Release 用に Build した Binary に対して行っても サイズダウンできたりするの?
- 676 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 07:58:19.03 ID:pUv0T+7B.net]
- >>674
Stripに詳しくないので、言っている意味が分からない。 Stripって Release 用に Build した Binary に対して行っても サイズダウンできたりするの?
- 677 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 08:15:51.54 ID:hpIa4Qjb.net]
- 日本語インライン入力の対応ってまだなの?
というか予定自体なくて諦めた方がいい? wxWidgets使ってるEditraってエディタにそろそろ移行できるかなと 思って試してみたら、未だにインライン入力できない
- 678 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 08:19:53.34 ID:pUv0T+7B.net]
- >>674
小さくなりますた!! Relese, 動的リンク /wxWidgets-2.8.12/samples/keyboard/gcc_mswdll/keyboard.exe strip 前:299,808 bytes strip 後:124,430 bytes Relese, 静的リンク /wxWidgets-2.8.12/samples/keyboard/gcc_msw/keyboard.exe strip 前:2,993,255 bytes strip 後:1,887,758 bytes strip 後も、*.exe が正常に起動することを確認済み。
- 679 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 08:22:26.84 ID:pUv0T+7B.net]
- >>673
>エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける 詳しく:
- 680 名前:デフォルトの名無しさん [2014/08/30(土) 11:51:11.86 ID:RJxcDZkh.net]
- 馬鹿には無理
- 681 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 12:02:34.82 ID:S/CtHe8u.net]
- スタンド・アローン・コンプレックスと化した馬鹿には無理さんオッスオッス
>>679 cua-modeでググって qiita.com/yyamamot/items/7efcbfdcccdb5fa45ebe 例えばイベントテーブルとかはこれでザクッと一気に書ける もちろん個々のwxWindowIDとメソッド定義は書かなくてはいけないが クラス名とマクロ定義は同じ文字列の繰り返しなのでだいぶ楽になる
- 682 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 13:53:01.64 ID:pUv0T+7B.net]
- >>681
あー、そういう風に沢山のイベントを一気に書きたいんじゃなくて、 開発段階で徐々にイベントを追加して行く際に、 1. *.h のクラス内にメンバ関数宣言 2. *.cpp に EVENT MAP 3. *.cpp に メンバ関数定義の本体 の三箇所にコードを書くのが面倒ということなんだわ。
- 683 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 14:33:49.98 ID:S/CtHe8u.net]
- >>682
それは自分で作らないと無さげですねえ
- 684 名前:デフォルトの名無しさん mailto:sage [2014/08/30(土) 19:11:57.66 ID:5dlfaubU.net]
- wxFormBuilderでしかGUIとイベントを設計できない俺には何言ってるのかさっぱりわからんぜよ……
- 685 名前:678 mailto:sage [2014/08/31(日) 15:54:21.95 ID:X+I89xFV.net]
- wxAUI のデモ・アプリ wxauitest.exe のサイズは、1,417,216 bytes。
スタンドアロンのアプリで、環境変数からパスを完全に消去しても起動 できた。つまり、ライブラリはDLLを使わずに静的リンクされている。 wxAUIはFloating & Dockingのできる強力なGUI。 >>678 に示した keyboard.exe はキーボードから押されたキーの値を 表示するだけで、上記アプリよりずっとシンプルなのにも関わらず、 1,887,758 bytes と 470,542 bytes も大きい。 理由は不明。
- 686 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 15:56:18.96 ID:5rh0udnx.net]
- そんなことしなくても
DLLの依存関係調べるツールあるのに
- 687 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 16:01:12.95 ID:5rh0udnx.net]
- ちなみにwxWidgetsで作った一番小さいexe探したら65kbのがあった
- 688 名前:678 mailto:sage [2014/08/31(日) 17:34:23.46 ID:X+I89xFV.net]
- Windows実行形式であっても、コンパイラが、MinGW32 と VC++ でサイズに
大幅な違いが出てくるのかな?
- 689 名前:678 mailto:sage [2014/08/31(日) 17:41:03.82 ID:X+I89xFV.net]
- >>687
それは DLL 版だよ。絶対に。
- 690 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 19:56:13.33 ID:F1QgxQvq.net]
- >>685
実行ファイルの関数テーブルに何が入っているか nm で確認したら少しはわかるかもね >>688 大幅とは行かないかもしれないがVC++はWindowsのみをターゲットにしているから 基本的にコンパイル後のバイナリサイズは MinGW > VC++ だよね
- 691 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 20:18:05.13 ID:da+aRwUf.net]
- CodeBlocks + MinGW32 で、
wxWidgets の Monolithic、ASCIIライブラリ, 静的リンク で 最も簡単な Frame Based な GUI を作成してみたら、 2,073,600 バイトよりは小さくならなかった。 wxWidgets のライブラリは、 -Os -ffunction-sections -fdata-sections でコンパイルし、 -Wl,--gc-sections -s でライブラリ化した。その時のコマンド: mingw32-make -j2 -f makefile.gcc CPPFLAGS="-MD -MP -DHAVE_W32API_H -D__WXMSW__ -DNOPCH -DwxDEBUG_LEVEL=0 -DNDEBUG" CFLAGS="-mthreads -fmessage-length=0 -ffunction-sections -fdata-sections -fno-builtin -Os" CXXFLAGS="-mthreads -Wno-ctor-dtor-privacy -fmessage-length=0 -ffunction-sections -fdata-sections -fno-builtin -Os -fno-keep-inline-dllexport" LDFLAGS="-Wl,--subsystem,windows -Wl,--gc-sections -s -mthreads -mwindows" BUILD=release UNICODE=0 SHARED=0 MONOLITHIC=1 CodeBlocks でアプリのリンクのオプションにも、 -Wl,--gc-sections -s は付けてある。
- 692 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 20:27:38.74 ID:da+aRwUf.net]
- ちなみに、Unicode 版より ASCII 版のほうが小さくなることを確認済みである。
[Compiler settings - #defines] が、標準では、 __GNUWIN32__, __WXMSW__, WXUSINGDLL, wxUSE_UNICODE, WX_PRECOMP となるところを: __GNUWIN32__, __WXMSW__ だけとし、 [Search Directories] の Compiler, Linker, Compiler の、gcc_dll の部分を、gcc_lib に変えた。 アプリにリンクするリンクライブラリとしては、上記で作成した Monolithic ライブラリだけでは足りず、以下が必要であった。Win32のimport libraryは、 ライブラリを動的リンクする場合はライブラリのDLLが行っているので必要ない が、ライブラリを静的リンクする場合は、アプリが直接リンクする必要がある ため必要となるのは理解できる。libwxpng, libwxjpeg, libwxtiff, libwxzlib が必要となった理由は不明。 libwxmsw28 // これが wxWidgets の monolithic ライブラリ本体。 libwxpng libwxjpeg libwxtiff libwxzlib libuuid // Win32 の import library libcomctrl32 // Win32 の import library libwinspool // Win32 の import library liboleaut32 // Win32 の import library libole32 // Win32 の import library ちなみに、wxWidgets を動的リンクする場合は、ここが、libwxmsw28 だけで済む。
- 693 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 20:33:24.61 ID:da+aRwUf.net]
- 誤:[Search Directories] の Compiler, Linker, Compiler
正:[Search Directories] の Compiler, Linker, Resource Compiler 誤:Win32のimport libraryは、ライブラリを動的リンクする場合はライブ ラリのDLLが行っているの 正:wxWidgets ライブラリをアプリに動的リンクする場合は wxWidgets ライブラリの DLL 部分が Win32 の import library の リンクを行っているの
- 694 名前:デフォルトの名無しさん [2014/08/31(日) 20:45:44.37 ID:0aT2mco7.net]
- サイズはどうでもよくないか。exeを使う側としては速度では?
あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。
- 695 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 20:48:05.22 ID:ks+4W1rG.net]
- 完全テンプレートライブラリにしたら軽くなるんだろうか
- 696 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 20:58:57.78 ID:da+aRwUf.net]
- >>694
でも wxWidgets がやっていることの割にはリンクされるバイト数が多すぎる 感じがする。 基本、Win32をラッピングしているだけなのだから、2MBも必要ない。
- 697 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 21:00:34.83 ID:ks+4W1rG.net]
- ラッピングしてるだけじゃなくマルチプラットフォームのために徹底した抽象化をしてるんでしょ
とソースも読まず推測
- 698 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 21:04:00.35 ID:da+aRwUf.net]
- >>697
でもソースを呼んでみたら、たとえば、wxListCtrl なんかは、 Win32 の LIST CONTROL をそのまま使っていた。 DrawRect()などで書いているわけではない。 ただし、wxGenericListCtrl だったかは、DrawRect()みたいなグラフィック 関数で独自に描画していた。が、それは、Windows版では簡単には使えない という噂を聞いたが。
- 699 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 21:06:47.60 ID:da+aRwUf.net]
- >>697
wxWidgets の基本設計は、Widgetは、OS nativeの物を使うが、 どんなサイズであっても対応できるように Sizer で Layout を コントロールする、という物。 なので、抽象化はサイズと配置程度で済むはずなのだが・・・。
- 700 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 21:09:35.31 ID:F1QgxQvq.net]
- >>696
>>697の言ってることが正しい。 --------------------- wxWidgets --------------------- Win32 | GTK | Cocoa etc... --------------------- wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので 型情報・関数テーブルの情報だけで結構容量食う >>692 ASCIIモードでビルドするのはやめておいたほうがいい 日本語使えないし というかなぜMonolithicビルドにこだわるのか… 普通にconfigureからビルドしてdllごと配布したほうが立ち上がりは早い
- 701 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 23:57:56.42 ID:da+aRwUf.net]
- wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替 えは出来ないようだった。 実は、Win32 の LIST CONTROL は、 ・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要 とする。 ・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない 奇妙な動作をする。奇妙な動作と言ったがバグに近い。 こういった辺りがどう処理されているか知りたかったのだが、サンプルでは 故意か偶然か、全くそこに触れていないようだった。
- 702 名前:デフォルトの名無しさん mailto:sage [2014/08/31(日) 23:59:28.64 ID:da+aRwUf.net]
- wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替 えは出来ないようだった。 実は、Win32 の LIST CONTROL は、 ・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要 とする。 ・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない 奇妙な動作をする。奇妙な動作と言ったがバグに近い。 こういった辺りがどう処理されているか知りたかったのだが、サンプルでは 故意か偶然か、全くそこに触れていないようだった。
|

|