クロスプラットフォーム 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/
探検
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
2010/04/09(金) 15:12:36
610デフォルトの名無しさん
2014/02/26(水) 18:38:10.36 デモ実行してみて自分の欲しい機能と似たものを見つけたら「ソースを見る」をクリック。
611デフォルトの名無しさん
2014/02/26(水) 18:44:29.66 すいません、見てるものが違うかもしれないので確認させてください
チュートリアルとは何を指してますか?
デモはdemosフォルダの中にあるプロジェクトですよね?「ソースを見る」とはなんでしょうか?
チュートリアルとは何を指してますか?
デモはdemosフォルダの中にあるプロジェクトですよね?「ソースを見る」とはなんでしょうか?
612デフォルトの名無しさん
2014/02/26(水) 18:48:03.88 ごめん。
見てるものが違った。
wxPython の方見てた。
見てるものが違った。
wxPython の方見てた。
613デフォルトの名無しさん
2014/02/26(水) 18:53:20.95 wxPythonのDemo見て目星を付けて
wxPythonのソースを参考にwxWidgetsでCソース書くのもあり
wxPythonのソースを参考にwxWidgetsでCソース書くのもあり
614デフォルトの名無しさん
2014/02/26(水) 19:08:22.51 なるほど
wxPythonでコードを書いたものがC++に直接変換できたりしたら便利ですね
wxGladeみたいに
wxPythonでコードを書いたものがC++に直接変換できたりしたら便利ですね
wxGladeみたいに
615デフォルトの名無しさん
2014/02/26(水) 20:20:43.75 なんか久しぶりにwxスレが伸びてるぞ、新規ユーザー大歓迎
ボタンとかテキストエリアの動的な生成は、wxPanelとかwxSizerを使った簡単なサンプルを作ったら理解できると思う
言葉で説明するよりコード書いたほうがよいけど一応書いとく
例えばボタンを生成・削除しようとする場合
親Panelをparent, 子panelをchildとすると
1. ウィジェットの生成:parentをnewして、必要な分だけchildをnew
child = new wxPanel(parent, …);
...
2. ウィジェットの削除:parent.DestoryChildren();
この関数で子ウィジェットを全部きれいに削除できる
説明の意味がわからなければ、まずは適当なチュートリアルサイトに行くべし
おすすめ
http://zetcode.com/gui/wxwidgets/
ボタンとかテキストエリアの動的な生成は、wxPanelとかwxSizerを使った簡単なサンプルを作ったら理解できると思う
言葉で説明するよりコード書いたほうがよいけど一応書いとく
例えばボタンを生成・削除しようとする場合
親Panelをparent, 子panelをchildとすると
1. ウィジェットの生成:parentをnewして、必要な分だけchildをnew
child = new wxPanel(parent, …);
...
2. ウィジェットの削除:parent.DestoryChildren();
この関数で子ウィジェットを全部きれいに削除できる
説明の意味がわからなければ、まずは適当なチュートリアルサイトに行くべし
おすすめ
http://zetcode.com/gui/wxwidgets/
616デフォルトの名無しさん
2014/02/26(水) 20:22:35.51 >>614
慣れたら直接C++で書けるから多分コンバータは需要無いよ
慣れたら直接C++で書けるから多分コンバータは需要無いよ
617デフォルトの名無しさん
2014/02/26(水) 20:29:50.32618デフォルトの名無しさん
2014/02/26(水) 20:30:17.32 そのくらい wx は良く出来てるね。
619デフォルトの名無しさん
2014/02/28(金) 21:18:50.52 Qt以下の品質。gtkならcで書けた。
620デフォルトの名無しさん
2014/03/01(土) 00:37:16.59 そらQtのほうがメジャーやろ、死ね
621デフォルトの名無しさん
2014/03/01(土) 01:40:12.84 どっちも1992年頃にできた。OSSといえども商業的な成功がコミュニティ形成の鍵。
それ以外はGood Oldを懐かしむロートルか宗教的価値観に支えられているだけ。
それ以外はGood Oldを懐かしむロートルか宗教的価値観に支えられているだけ。
622デフォルトの名無しさん
2014/03/01(土) 01:51:22.19 GUI比較スレってなんだよね・・・
比較的な話ってここで展開してもよいものやら
というかwxWidgetとQtどっちも使ってる人っているのか
比較的な話ってここで展開してもよいものやら
というかwxWidgetとQtどっちも使ってる人っているのか
623デフォルトの名無しさん
2014/03/01(土) 02:28:31.91 世の中のアプリケーションはQtかAwt/Swingが採用される流れ。
直交性ならgtk。サクッと安定したものを書くならtk。
トイプログラムならSDL+OpenGL。生きるとは残酷なことである。
直交性ならgtk。サクッと安定したものを書くならtk。
トイプログラムならSDL+OpenGL。生きるとは残酷なことである。
624デフォルトの名無しさん
2014/03/01(土) 12:13:44.67 バイナリサイズでかいですな
VC2010でサイズ最適化オプションかけてもHelloWorldで5MB...
これはもうどうしようもない感じ?
VC2010でサイズ最適化オプションかけてもHelloWorldで5MB...
これはもうどうしようもない感じ?
625デフォルトの名無しさん
2014/03/01(土) 12:23:48.03 どうしようもないっす
ベース部分(wxStringとかwxWindowとか)の定義が容量食ってるから?ではないかという疑惑
ベース部分(wxStringとかwxWindowとか)の定義が容量食ってるから?ではないかという疑惑
626デフォルトの名無しさん
2014/03/01(土) 12:27:18.78 うーんなるほど
ランタイムで色々判断出来るような設計なんですかねえ
ランタイムで色々判断出来るような設計なんですかねえ
627デフォルトの名無しさん
2014/03/01(土) 12:32:32.69 そうですねwxWidgetsはRTTIの仕組みが活かされてるみたいなドキュメントはどっかで見た
たぶんwxWidgetsの中核であるwxWindowクラスはそんなんばっかしなんだろう
たぶんwxWidgetsの中核であるwxWindowクラスはそんなんばっかしなんだろう
628デフォルトの名無しさん
2014/03/05(水) 12:40:46.24 ファイル操作系が異様にやりにくい
wxString dir_name("some directly name");
dir_name.Traverse(some_traverser,wxString(""),flags);
でディレクトリたどりながらファイル抽出できるかなとおもったが
flags = wxDIR_FILES
だとそのディレクトリの中身”のみ”探す
flags = wxDIR_DIRS
だとその下の”全ての”階層のディレクトリを抽出する
wxDIR_DEFAULT
だとその下の”すべての”ファイルを探す
なんでこんな仕様なんだ
wxString dir_name("some directly name");
dir_name.Traverse(some_traverser,wxString(""),flags);
でディレクトリたどりながらファイル抽出できるかなとおもったが
flags = wxDIR_FILES
だとそのディレクトリの中身”のみ”探す
flags = wxDIR_DIRS
だとその下の”全ての”階層のディレクトリを抽出する
wxDIR_DEFAULT
だとその下の”すべての”ファイルを探す
なんでこんな仕様なんだ
629デフォルトの名無しさん
2014/03/05(水) 12:45:32.18 ああわかった
ディレクトリが見つかった場合のみその下も探す、ということなんだな
するとファイルのみだと当然下なんぞ無いからそれ以下を探すことはなく
ディレクトリのみ、とすると下にもいけるから最下層まで探そうとするわけか
うーん
ディレクトリが見つかった場合のみその下も探す、ということなんだな
するとファイルのみだと当然下なんぞ無いからそれ以下を探すことはなく
ディレクトリのみ、とすると下にもいけるから最下層まで探そうとするわけか
うーん
630デフォルトの名無しさん
2014/03/05(水) 12:55:52.46 連投失礼
Traverserクラスを継承してそのOnDir関数の返り値で制御すればいいということでした
Traverserクラスを継承してそのOnDir関数の返り値で制御すればいいということでした
631デフォルトの名無しさん
2014/03/11(火) 15:51:27.09 浮動小数点を扱えるsliderってデフォルトではなさそうですか?
632デフォルトの名無しさん
2014/03/11(火) 17:23:40.57 たとえば 0 - 100 を 10 で割ると
0.0 - 10.0 のレンジになります
0.0 - 10.0 のレンジになります
633デフォルトの名無しさん
2014/03/11(火) 17:30:20.25 やっぱそんな感じなんすね
最大値最小値現在値ラベル表示が便利だなーとおもったんですが、小数点付きでやろうと思ったら
自分でラベル付けるしかなさそうですね
最大値最小値現在値ラベル表示が便利だなーとおもったんですが、小数点付きでやろうと思ったら
自分でラベル付けるしかなさそうですね
634デフォルトの名無しさん
2014/03/15(土) 21:45:40.12ID:w4oGcJBI 右側のボタンを押したら左側のパネルを再描写させたい、など
あるイベントから(親でない)ほかのイベントを誘発させたい時ってあると思うのですが
その辺に関する記事てどっかにあります?
あるイベントから(親でない)ほかのイベントを誘発させたい時ってあると思うのですが
その辺に関する記事てどっかにあります?
635デフォルトの名無しさん
2014/03/15(土) 23:13:55.37ID:eHN/5w2/ >>634
そのへんはイベント処理の領域になりますね
wxWiki見るしかない感じ
イメージとしては
Sample::LeftPanelRedraw(wxCommandEvent& event);
というイベント関数のIDがID_LeftPanelRedrawであった場合
そのイベントは
wxCommandEvent e(wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, ID_LeftPanelRedraw));
LeftPanelRedraw(e);
で呼べる
そのへんはイベント処理の領域になりますね
wxWiki見るしかない感じ
イメージとしては
Sample::LeftPanelRedraw(wxCommandEvent& event);
というイベント関数のIDがID_LeftPanelRedrawであった場合
そのイベントは
wxCommandEvent e(wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, ID_LeftPanelRedraw));
LeftPanelRedraw(e);
で呼べる
636デフォルトの名無しさん
2014/03/15(土) 23:39:19.87ID:w4oGcJBI >>635
了解です、参考にさせていただきます
了解です、参考にさせていただきます
637デフォルトの名無しさん
2014/03/21(金) 11:44:27.13ID:hjbpSh7I glcanvasを使ってパネルを描写し、ドラッグに反応するようにしたのですが
ドラッグ中に、ポインタがパネルの範囲外に出た時に、反応が止まってしまいます
sampleのdragimagではドラッグ中であれば範囲外でもイベントが取れるようですが
sampleのopengl/penguinだと取れないようです
マウスイベントの接続は両者ともEVT_MOUSE_EVENTSで行っているので
何が違って取れているのかわかりません
その辺の事情、どなたかご存知ないですか?
ドラッグ中に、ポインタがパネルの範囲外に出た時に、反応が止まってしまいます
sampleのdragimagではドラッグ中であれば範囲外でもイベントが取れるようですが
sampleのopengl/penguinだと取れないようです
マウスイベントの接続は両者ともEVT_MOUSE_EVENTSで行っているので
何が違って取れているのかわかりません
その辺の事情、どなたかご存知ないですか?
638デフォルトの名無しさん
2014/03/21(金) 12:58:58.01ID:hjbpSh7I わかりました
wxWindowBase::wCaptureMouse()を呼び出すと以降座標とイベントが取得されるようです
wxWindowBase::wCaptureMouse()を呼び出すと以降座標とイベントが取得されるようです
639デフォルトの名無しさん
2014/03/23(日) 17:51:04.60ID:cY3NJQQl はい。知ってますよ。
640デフォルトの名無しさん
2014/03/23(日) 19:26:21.87ID:0loqh5rV いや、知らないです
641デフォルトの名無しさん
2014/05/12(月) 21:36:09.61ID:d288LkW9 クロスプラットフォームの開発環境について調べてるんですが、wxWidgetsの
GUIは外観とかは各プラットフォームのものが使われるんですか?それとも
独自のテーマになってしまうんでしょうか?
GUIは外観とかは各プラットフォームのものが使われるんですか?それとも
独自のテーマになってしまうんでしょうか?
642デフォルトの名無しさん
2014/05/12(月) 21:48:19.14ID:N4i3m2/R >>641
各プラットフォームのものが使われます
つまりWindowsならWIN32、LinuxならGTK、MacならCocoa
それぞれの外観になります
対してQtやTk、JavaのSwingなどは独自のテーマになります
各プラットフォームのものが使われます
つまりWindowsならWIN32、LinuxならGTK、MacならCocoa
それぞれの外観になります
対してQtやTk、JavaのSwingなどは独自のテーマになります
643デフォルトの名無しさん
2014/05/12(月) 21:58:07.29ID:KhXbSVtN Qtってそうだったんだ
644デフォルトの名無しさん
2014/05/12(月) 22:57:11.37ID:d288LkW9 >>642
ありがとうございます。他の環境まで概括してくださるとは助かりました。
ありがとうございます。他の環境まで概括してくださるとは助かりました。
645デフォルトの名無しさん
2014/05/13(火) 02:25:29.32ID:mUTDx2p/646デフォルトの名無しさん
2014/05/25(日) 10:10:57.42ID:Wcl6d7YS てす
647デフォルトの名無しさん
2014/06/03(火) 09:02:12.18ID:va6vQ78Z648デフォルトの名無しさん
2014/06/04(水) 21:33:25.19ID:EBZlr/6D いまこのスレ開いたら、>>646にあったはずの有益な書き込みが消えている…
貼っておこう
> 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で止めておいた方が良いかも。
貼っておこう
> 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で止めておいた方が良いかも。
649デフォルトの名無しさん
2014/06/05(木) 01:15:41.59ID:/T91KtMA なんと、板移転したときに消えたのかもしれないね。
650デフォルトの名無しさん
2014/06/19(木) 12:54:27.42ID:sMGAuaVR wxWidgetsを使って作られたプログラムの一覧ってあったりするのかね?
とりあえずAudacityは知ってる
とりあえずAudacityは知ってる
651デフォルトの名無しさん
2014/06/19(木) 19:37:20.57ID:Brdb8B0I652デフォルトの名無しさん
2014/06/19(木) 19:41:04.43ID:sMGAuaVR おーありがとう
後で見て回る
テンプレにあってもいいじゃないかな?
後で見て回る
テンプレにあってもいいじゃないかな?
653デフォルトの名無しさん
2014/06/19(木) 20:07:59.88ID:gduOxxnf 車の再発見
654デフォルトの名無しさん
2014/06/19(木) 22:56:02.45ID:Brdb8B0I655デフォルトの名無しさん
2014/08/24(日) 18:20:53.22ID:Gtnn2j9y wxWidgetsで、フォームを閉じる処理をして実際に閉じるまでの間に発生するイベントとかある?
.NETで言うところのOnClosingみたいな感じで。
.NETで言うところのOnClosingみたいな感じで。
656デフォルトの名無しさん
2014/08/25(月) 02:12:21.61ID:OTL7uAT+ OnClose
OnVeto
OnVeto
657デフォルトの名無しさん
2014/08/25(月) 14:23:49.85ID:IQl9g11m658デフォルトの名無しさん
2014/08/26(火) 17:09:00.43ID:QEgdFK7f Windows で、
CrossBlock + MinGW + wxWidget
で最も簡単な GUI アプリを基本プロジェクトで作成してみたところ、
MyTest.exe のサイズ:736KB
(wxWidgetのDLL) wxmsw28u_gcc_custom.dll のサイズ : 15.9MB
MyTest.exe のメモリ使用量 : 7,732KB // TaskManagerの表示
となった。
この基本アプリは、HelpでAboutでメッセージ・ボックスが表示できる
ようになっているが、メニュー項目をクリックしてから実際にそれが
出るまで数秒かかる。実験したのはそこそこ速いマシンと速い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デフォルトの名無しさん
2014/08/26(火) 17:09:45.00ID:QEgdFK7f ただし、遅いのは最初の一回だけ。
一度でも表示すると後は速い。
一度でも表示すると後は速い。
660デフォルトの名無しさん
2014/08/26(火) 17:56:51.72ID:QEgdFK7f Mailer の Thunderbird-Portable なんかもマルチプラットフォーム対応
だけど、起動がかなり遅い。これも巨大な dll を読み込んだりしてる
からかな。
起動やメニュー操作が遅くなるのはマルチプラットフォーム化する代償
として負わされるのかも知れん。
こういうツールキットで軽快なアプリを作るのは難しいのかもな。
だけど、起動がかなり遅い。これも巨大な dll を読み込んだりしてる
からかな。
起動やメニュー操作が遅くなるのはマルチプラットフォーム化する代償
として負わされるのかも知れん。
こういうツールキットで軽快なアプリを作るのは難しいのかもな。
661デフォルトの名無しさん
2014/08/26(火) 19:14:34.45ID:OmJCXozv 小規模の自作ソフトでwxWidgetsをスタティックリンクしない理由が分からん
わざわざ合計バイナリサイズを大きく、速度も遅くする理由がどこにあるのだろう
わざわざ合計バイナリサイズを大きく、速度も遅くする理由がどこにあるのだろう
662デフォルトの名無しさん
2014/08/26(火) 21:27:38.25ID:QEgdFK7f663デフォルトの名無しさん
2014/08/26(火) 21:50:56.10ID:JtVIC4MG ある程度規模が大きくなるとスタティックリンクだと初回起動が遅すぎになので
dllにモジュールを分割してやったほうがいい
起動時のメモリへのロード時間はどうしようもないのでスプラッシュをつけてごまかす
dllにモジュールを分割してやったほうがいい
起動時のメモリへのロード時間はどうしようもないのでスプラッシュをつけてごまかす
664デフォルトの名無しさん
2014/08/26(火) 22:39:34.76ID:QEgdFK7f CrossBlockでは、monolithic タイプのライブラリをビルドしてから使う
ようになってるんだけど、それも遅い原因なのかな。
でも起動後にユーザー入力に対するレスポンスが遅いのはどう説明すれば
いいんだろう?
普通の Windows の仕様だと原則、起動時に全ての DLL をロードする。
LoadLibrary()を使えば動的にロードすることも可能は可能だけど、
それをする必要は旧OSでサポートしてなかった新OSのDLLをロードする
ような場合は、多言語化のサポートなど。
なるほど、多言語化のせいかも。_("xxx") みたいなのがあったから、
gettext を使ってる。それでリソースを動的ロードしているのか。
ようになってるんだけど、それも遅い原因なのかな。
でも起動後にユーザー入力に対するレスポンスが遅いのはどう説明すれば
いいんだろう?
普通の Windows の仕様だと原則、起動時に全ての DLL をロードする。
LoadLibrary()を使えば動的にロードすることも可能は可能だけど、
それをする必要は旧OSでサポートしてなかった新OSのDLLをロードする
ような場合は、多言語化のサポートなど。
なるほど、多言語化のせいかも。_("xxx") みたいなのがあったから、
gettext を使ってる。それでリソースを動的ロードしているのか。
665デフォルトの名無しさん
2014/08/27(水) 04:40:25.51ID:IfBPvyzm 何度かアプリ起動しているうちにWindowsのFetchが学習してくれて
DLLとか先読みしてくれるようにならないのだろうか
DLLとか先読みしてくれるようにならないのだろうか
666デフォルトの名無しさん
2014/08/27(水) 06:47:58.33ID:J2peHUgZ >>665
それはなる。
・ディスクの内容は、メモリにキャッシュされる。
・同じDLLは、全てのアプリで物理メモリが共有されると聞いたことがある。
# >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。
それより、wxWidget 本家のソース配布に入っている samples を
Windows の mingw32 でビルドしてみたところ、全然遅くなかった。
・アプリの起動は速い。
・起動後のメニューコマンドやユーザー入力に対するレスポンスも速い。
・Aboutダイアログも瞬間ではないが、0.3秒程度で、Windows Nativeアプリ
でも、その程度の遅さはある場合があるので遜色ない。
CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
ライブラリを使用しているからか。
それはなる。
・ディスクの内容は、メモリにキャッシュされる。
・同じDLLは、全てのアプリで物理メモリが共有されると聞いたことがある。
# >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。
それより、wxWidget 本家のソース配布に入っている samples を
Windows の mingw32 でビルドしてみたところ、全然遅くなかった。
・アプリの起動は速い。
・起動後のメニューコマンドやユーザー入力に対するレスポンスも速い。
・Aboutダイアログも瞬間ではないが、0.3秒程度で、Windows Nativeアプリ
でも、その程度の遅さはある場合があるので遜色ない。
CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
ライブラリを使用しているからか。
667デフォルトの名無しさん
2014/08/27(水) 07:54:18.52ID:X38Kg7Ty >>666
># >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。
なんだと思ったらわりと素人じゃねえかおい
>CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
>ライブラリを使用しているからか。
monolithicってのはwxWidgetsのモジュール全部入りのDLL作るという意味なので遅くて当然
(実際試したことないので遅いというのは初めて知ったが…)
普通は ./configure --prefix=/mingw --enable-shared みたいに指定してビルドするから
モジュールごとに分割されたDLLが作成される
Windows上で開発する時はMinGW + NTEmacs/eclipse CDTの環境がおすすめ
># >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。
なんだと思ったらわりと素人じゃねえかおい
>CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
>ライブラリを使用しているからか。
monolithicってのはwxWidgetsのモジュール全部入りのDLL作るという意味なので遅くて当然
(実際試したことないので遅いというのは初めて知ったが…)
普通は ./configure --prefix=/mingw --enable-shared みたいに指定してビルドするから
モジュールごとに分割されたDLLが作成される
Windows上で開発する時はMinGW + NTEmacs/eclipse CDTの環境がおすすめ
668デフォルトの名無しさん
2014/08/27(水) 09:58:52.27ID:J2peHUgZ >>667
最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
configure は使えない気がする。
CodeBlocks のQuickなんたらRefの説明では、いきなり、
make するように支持されていた。しかも、-fno なんたら dll-export
みたいなオプションを付けろと指示。これは、MinGW32のバグで、
付けないと最後のldの段階でldがクラッシュする事をたまたま発見。
ところで話は変わって聞いておきたいのですが、 eclipse では
wxWidget のイベントを書くようなときに
・BEGIN_EVENT_MAP に自動的に一行マクロを挿入してくれて
・*.h にもメンバ関数宣言を書いてくれて
・*.cpp にも5行くらいの関数定義本体の雛形を書いてくれ
たりしますか?
最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
configure は使えない気がする。
CodeBlocks のQuickなんたらRefの説明では、いきなり、
make するように支持されていた。しかも、-fno なんたら dll-export
みたいなオプションを付けろと指示。これは、MinGW32のバグで、
付けないと最後のldの段階でldがクラッシュする事をたまたま発見。
ところで話は変わって聞いておきたいのですが、 eclipse では
wxWidget のイベントを書くようなときに
・BEGIN_EVENT_MAP に自動的に一行マクロを挿入してくれて
・*.h にもメンバ関数宣言を書いてくれて
・*.cpp にも5行くらいの関数定義本体の雛形を書いてくれ
たりしますか?
669デフォルトの名無しさん
2014/08/27(水) 10:01:06.29ID:J2peHUgZ つまり、イベント・ハンドラを追加したとき、
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
はありません?
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デフォルトの名無しさん
2014/08/29(金) 11:13:03.59ID:AEJEOYpd 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 は、アプリ本体のプログラムが複雑なことをしているようなので、
もっと小さく出来る可能性があり。
特に静的リンクしたときに顕著。
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デフォルトの名無しさん
2014/08/29(金) 19:04:31.75ID:GS9LyL7J その説明にac1だの何だの自分以外分からない定義を使う必要があったのだろうか
672デフォルトの名無しさん
2014/08/29(金) 19:07:59.00ID:AEJEOYpd 今から見るとそうかも。
a: Windows Native or MFC
b: wzWidgets
c: CUI
g: GUI
r:release, d:debug
d:dynamic link, s:static link
a: Windows Native or MFC
b: wzWidgets
c: CUI
g: GUI
r:release, d:debug
d:dynamic link, s:static link
673デフォルトの名無しさん
2014/08/30(土) 00:17:55.46ID:S/CtHe8u >>668
>最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
>configure は使えない気がする。
なにいってんだCodeBlocksのドキュメントにそう書いてあるだけで
基本autotoolsで作られたソースはconfigureでビルドできるぞ
実際自分はWindows上のmingw32/64、LinuxのクロスビルドからのMinGWでconfigure使ってる
なぜMakefileでやれという指示なのかというと、そのほうが簡潔で保守しやすいからだ
あとGNU MakeじゃないMakeでもビルドできるようにしたいとかいう微妙なこだわりが有る場合も有る
>>669
エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける
ソースのひな形自動生成機能は知らんなあ
>最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
>configure は使えない気がする。
なにいってんだCodeBlocksのドキュメントにそう書いてあるだけで
基本autotoolsで作られたソースはconfigureでビルドできるぞ
実際自分はWindows上のmingw32/64、LinuxのクロスビルドからのMinGWでconfigure使ってる
なぜMakefileでやれという指示なのかというと、そのほうが簡潔で保守しやすいからだ
あとGNU MakeじゃないMakeでもビルドできるようにしたいとかいう微妙なこだわりが有る場合も有る
>>669
エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける
ソースのひな形自動生成機能は知らんなあ
674デフォルトの名無しさん
2014/08/30(土) 00:21:29.81ID:S/CtHe8u >>670
MinGWビルドでバイナリをストリップしたやつとか比較しないのか
MinGWビルドでバイナリをストリップしたやつとか比較しないのか
675デフォルトの名無しさん
2014/08/30(土) 07:56:49.02ID:pUv0T+7B676デフォルトの名無しさん
2014/08/30(土) 07:58:19.03ID:pUv0T+7B677デフォルトの名無しさん
2014/08/30(土) 08:15:51.54ID:hpIa4Qjb 日本語インライン入力の対応ってまだなの?
というか予定自体なくて諦めた方がいい?
wxWidgets使ってるEditraってエディタにそろそろ移行できるかなと
思って試してみたら、未だにインライン入力できない
というか予定自体なくて諦めた方がいい?
wxWidgets使ってるEditraってエディタにそろそろ移行できるかなと
思って試してみたら、未だにインライン入力できない
678デフォルトの名無しさん
2014/08/30(土) 08:19:53.34ID:pUv0T+7B >>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 が正常に起動することを確認済み。
小さくなりますた!!
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デフォルトの名無しさん
2014/08/30(土) 08:22:26.84ID:pUv0T+7B680デフォルトの名無しさん
2014/08/30(土) 11:51:11.86ID:RJxcDZkh 馬鹿には無理
681デフォルトの名無しさん
2014/08/30(土) 12:02:34.82ID:S/CtHe8u スタンド・アローン・コンプレックスと化した馬鹿には無理さんオッスオッス
>>679
cua-modeでググって
http://qiita.com/yyamamot/items/7efcbfdcccdb5fa45ebe
例えばイベントテーブルとかはこれでザクッと一気に書ける
もちろん個々のwxWindowIDとメソッド定義は書かなくてはいけないが
クラス名とマクロ定義は同じ文字列の繰り返しなのでだいぶ楽になる
>>679
cua-modeでググって
http://qiita.com/yyamamot/items/7efcbfdcccdb5fa45ebe
例えばイベントテーブルとかはこれでザクッと一気に書ける
もちろん個々のwxWindowIDとメソッド定義は書かなくてはいけないが
クラス名とマクロ定義は同じ文字列の繰り返しなのでだいぶ楽になる
682デフォルトの名無しさん
2014/08/30(土) 13:53:01.64ID:pUv0T+7B >>681
あー、そういう風に沢山のイベントを一気に書きたいんじゃなくて、
開発段階で徐々にイベントを追加して行く際に、
1. *.h のクラス内にメンバ関数宣言
2. *.cpp に EVENT MAP
3. *.cpp に メンバ関数定義の本体
の三箇所にコードを書くのが面倒ということなんだわ。
あー、そういう風に沢山のイベントを一気に書きたいんじゃなくて、
開発段階で徐々にイベントを追加して行く際に、
1. *.h のクラス内にメンバ関数宣言
2. *.cpp に EVENT MAP
3. *.cpp に メンバ関数定義の本体
の三箇所にコードを書くのが面倒ということなんだわ。
683デフォルトの名無しさん
2014/08/30(土) 14:33:49.98ID:S/CtHe8u >>682
それは自分で作らないと無さげですねえ
それは自分で作らないと無さげですねえ
684デフォルトの名無しさん
2014/08/30(土) 19:11:57.66ID:5dlfaubU wxFormBuilderでしかGUIとイベントを設計できない俺には何言ってるのかさっぱりわからんぜよ……
685678
2014/08/31(日) 15:54:21.95ID:X+I89xFV wxAUI のデモ・アプリ wxauitest.exe のサイズは、1,417,216 bytes。
スタンドアロンのアプリで、環境変数からパスを完全に消去しても起動
できた。つまり、ライブラリはDLLを使わずに静的リンクされている。
wxAUIはFloating & Dockingのできる強力なGUI。
>>678 に示した keyboard.exe はキーボードから押されたキーの値を
表示するだけで、上記アプリよりずっとシンプルなのにも関わらず、
1,887,758 bytes と 470,542 bytes も大きい。
理由は不明。
スタンドアロンのアプリで、環境変数からパスを完全に消去しても起動
できた。つまり、ライブラリはDLLを使わずに静的リンクされている。
wxAUIはFloating & Dockingのできる強力なGUI。
>>678 に示した keyboard.exe はキーボードから押されたキーの値を
表示するだけで、上記アプリよりずっとシンプルなのにも関わらず、
1,887,758 bytes と 470,542 bytes も大きい。
理由は不明。
686デフォルトの名無しさん
2014/08/31(日) 15:56:18.96ID:5rh0udnx そんなことしなくても
DLLの依存関係調べるツールあるのに
DLLの依存関係調べるツールあるのに
687デフォルトの名無しさん
2014/08/31(日) 16:01:12.95ID:5rh0udnx ちなみにwxWidgetsで作った一番小さいexe探したら65kbのがあった
688678
2014/08/31(日) 17:34:23.46ID:X+I89xFV Windows実行形式であっても、コンパイラが、MinGW32 と VC++ でサイズに
大幅な違いが出てくるのかな?
大幅な違いが出てくるのかな?
690デフォルトの名無しさん
2014/08/31(日) 19:56:13.33ID:F1QgxQvq691デフォルトの名無しさん
2014/08/31(日) 20:18:05.13ID:da+aRwUf 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
は付けてある。
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デフォルトの名無しさん
2014/08/31(日) 20:27:38.74ID:da+aRwUf ちなみに、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
だけで済む。
[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デフォルトの名無しさん
2014/08/31(日) 20:33:24.61ID:da+aRwUf 誤:[Search Directories] の Compiler, Linker, Compiler
正:[Search Directories] の Compiler, Linker, Resource Compiler
誤:Win32のimport libraryは、ライブラリを動的リンクする場合はライブ
ラリのDLLが行っているの
正:wxWidgets ライブラリをアプリに動的リンクする場合は
wxWidgets ライブラリの DLL 部分が Win32 の import library の
リンクを行っているの
正:[Search Directories] の Compiler, Linker, Resource Compiler
誤:Win32のimport libraryは、ライブラリを動的リンクする場合はライブ
ラリのDLLが行っているの
正:wxWidgets ライブラリをアプリに動的リンクする場合は
wxWidgets ライブラリの DLL 部分が Win32 の import library の
リンクを行っているの
694デフォルトの名無しさん
2014/08/31(日) 20:45:44.37ID:0aT2mco7 サイズはどうでもよくないか。exeを使う側としては速度では?
あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。
あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。
695デフォルトの名無しさん
2014/08/31(日) 20:48:05.22ID:ks+4W1rG 完全テンプレートライブラリにしたら軽くなるんだろうか
696デフォルトの名無しさん
2014/08/31(日) 20:58:57.78ID:da+aRwUf697デフォルトの名無しさん
2014/08/31(日) 21:00:34.83ID:ks+4W1rG ラッピングしてるだけじゃなくマルチプラットフォームのために徹底した抽象化をしてるんでしょ
とソースも読まず推測
とソースも読まず推測
698デフォルトの名無しさん
2014/08/31(日) 21:04:00.35ID:da+aRwUf >>697
でもソースを呼んでみたら、たとえば、wxListCtrl なんかは、
Win32 の LIST CONTROL をそのまま使っていた。
DrawRect()などで書いているわけではない。
ただし、wxGenericListCtrl だったかは、DrawRect()みたいなグラフィック
関数で独自に描画していた。が、それは、Windows版では簡単には使えない
という噂を聞いたが。
でもソースを呼んでみたら、たとえば、wxListCtrl なんかは、
Win32 の LIST CONTROL をそのまま使っていた。
DrawRect()などで書いているわけではない。
ただし、wxGenericListCtrl だったかは、DrawRect()みたいなグラフィック
関数で独自に描画していた。が、それは、Windows版では簡単には使えない
という噂を聞いたが。
699デフォルトの名無しさん
2014/08/31(日) 21:06:47.60ID:da+aRwUf >>697
wxWidgets の基本設計は、Widgetは、OS nativeの物を使うが、
どんなサイズであっても対応できるように Sizer で Layout を
コントロールする、という物。
なので、抽象化はサイズと配置程度で済むはずなのだが・・・。
wxWidgets の基本設計は、Widgetは、OS nativeの物を使うが、
どんなサイズであっても対応できるように Sizer で Layout を
コントロールする、という物。
なので、抽象化はサイズと配置程度で済むはずなのだが・・・。
700デフォルトの名無しさん
2014/08/31(日) 21:09:35.31ID:F1QgxQvq701デフォルトの名無しさん
2014/08/31(日) 23:57:56.42ID:da+aRwUf wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。
実は、Win32 の LIST CONTROL は、
・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
奇妙な動作をする。奇妙な動作と言ったがバグに近い。
こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。
実は、Win32 の LIST CONTROL は、
・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
奇妙な動作をする。奇妙な動作と言ったがバグに近い。
こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。
702デフォルトの名無しさん
2014/08/31(日) 23:59:28.64ID:da+aRwUf wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。
実は、Win32 の LIST CONTROL は、
・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
奇妙な動作をする。奇妙な動作と言ったがバグに近い。
こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。
実は、Win32 の LIST CONTROL は、
・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
奇妙な動作をする。奇妙な動作と言ったがバグに近い。
こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。
703デフォルトの名無しさん
2014/09/01(月) 00:00:47.70ID:X69OanmZ >>700
>wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので
>型情報・関数テーブルの情報だけで結構容量食う
オイラはコンパイラの基本部分に詳しいが、それだけで1MBなどには
ならない。
>wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので
>型情報・関数テーブルの情報だけで結構容量食う
オイラはコンパイラの基本部分に詳しいが、それだけで1MBなどには
ならない。
704デフォルトの名無しさん
2014/09/01(月) 00:06:51.19ID:X69OanmZ >>694
諦めることも手かも知れないけど、やっている事の規模とサイズとの
ギャップに納得がいかない人もいるはず。
wxWidgetsはラッピング・ライブラリの一種。
8bit時代、16bit時代を知る人にとって、Widget 程度が64KBを超える
事があってはならない。どういうプログラミングをしたら2MBにもなる
のか。
諦めることも手かも知れないけど、やっている事の規模とサイズとの
ギャップに納得がいかない人もいるはず。
wxWidgetsはラッピング・ライブラリの一種。
8bit時代、16bit時代を知る人にとって、Widget 程度が64KBを超える
事があってはならない。どういうプログラミングをしたら2MBにもなる
のか。
705デフォルトの名無しさん
2014/09/01(月) 01:16:10.03ID:7Pg7L2PA >>703
>>704
一理あるのでちょっとメーリングリストを探ってみたり
まず、wx/wx.hがいろいろなヘッダファイルを事前にincludeしているので
それがバイナリサイズの増加の一因になっているらしい
[wxMSW]: why EXE-files are so large?
https://groups.google.com/d/msg/wx-users/psTmm3nB6AU/9j6-4ir95-gJ
>>704
一理あるのでちょっとメーリングリストを探ってみたり
まず、wx/wx.hがいろいろなヘッダファイルを事前にincludeしているので
それがバイナリサイズの増加の一因になっているらしい
[wxMSW]: why EXE-files are so large?
https://groups.google.com/d/msg/wx-users/psTmm3nB6AU/9j6-4ir95-gJ
706デフォルトの名無しさん
2014/09/01(月) 07:25:22.06ID:X69OanmZ >>591 のライブラリを samples/keyboard にも使ってみたら、
keyboard.exe のサイズを 1,619,968 にまで縮小することに成功した。
コンパイラは MinGW32 のまま。
条件は:release, 非UNICODE(ASCII), SHARED=0(静的リンク), MONOLITHIC = 1
どうやら MONOLITHIC であるかどうかは最終 exe サイズには関係してないらしい。
ライブラリと言うのは集めてもばらしても、最終 exe のリンク結果には影響を
及ぼさない事が基本なので、元々当たり前なことなのだが。
[samples/keyboard]
$ mingw32-make -f makefile.gcc BUILD=release UNICODE=0 SHARED=0 MONOLITHIC=1
[samples/keyboard/makefile.gcc の修整]
-------------------------------------------------------------------------------------
$(OBJS)\keyboard.exe: $(KEYBOARD_OBJECTS) $(OBJS)\keyboard_keyboard_rc.o
$(CXX) -o $@ $(KEYBOARD_OBJECTS) $(__DEBUGINFO) $(__THREADSFLAG)
-L$(LIBDIRNAME) -Wl,--subsystem,windows -Wl,--gc-sections -Wl,-s -mwindows
$(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p)
$(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)
-lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)
$(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) $(__CAIRO_LIB_p)
-lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32
-loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
--------------------------------------------------------------------------------------
上記は original の makefile.gcc に、
-Wl,--gc-sections -Wl,-s
を追加しただけ。
keyboard.exe のサイズを 1,619,968 にまで縮小することに成功した。
コンパイラは MinGW32 のまま。
条件は:release, 非UNICODE(ASCII), SHARED=0(静的リンク), MONOLITHIC = 1
どうやら MONOLITHIC であるかどうかは最終 exe サイズには関係してないらしい。
ライブラリと言うのは集めてもばらしても、最終 exe のリンク結果には影響を
及ぼさない事が基本なので、元々当たり前なことなのだが。
[samples/keyboard]
$ mingw32-make -f makefile.gcc BUILD=release UNICODE=0 SHARED=0 MONOLITHIC=1
[samples/keyboard/makefile.gcc の修整]
-------------------------------------------------------------------------------------
$(OBJS)\keyboard.exe: $(KEYBOARD_OBJECTS) $(OBJS)\keyboard_keyboard_rc.o
$(CXX) -o $@ $(KEYBOARD_OBJECTS) $(__DEBUGINFO) $(__THREADSFLAG)
-L$(LIBDIRNAME) -Wl,--subsystem,windows -Wl,--gc-sections -Wl,-s -mwindows
$(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p)
$(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p)
-lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG)
$(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__GDIPLUS_LIB_p) $(__CAIRO_LIB_p)
-lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32
-loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lodbc32
--------------------------------------------------------------------------------------
上記は original の makefile.gcc に、
-Wl,--gc-sections -Wl,-s
を追加しただけ。
707デフォルトの名無しさん
2014/09/01(月) 07:31:05.33ID:X69OanmZ wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。
実は、Win32 の LIST CONTROL は、
・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
奇妙な動作をする。奇妙な動作と言ったがバグに近い。
こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。
実は、Win32 の LIST CONTROL は、
・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
奇妙な動作をする。奇妙な動作と言ったがバグに近い。
こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。
709デフォルトの名無しさん
2014/09/01(月) 07:45:41.49ID:X69OanmZ >>694
>あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。
「>>692」で示した Win32 import library は、Windows のシステム DLL
をリンクするための小さなライブラリ。例えば、
libcomctrl32 をリンクしていても、実際は、comctrl32.dll が動的リンク
される。libcomctrl32.a は、MinGW32 が用意している import library で:
/xxx/CodeBlocks/MinGW/lib/libcomctl32.a # 86,428 bytes
C:/WINDOWS/system32/comctl32.dll # 617,472 bytes
のように、windows/system32 の comctrl32.dll を動的リンクするための
呼び出し部分だけを提供する小さなライブラリ。
>あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。
「>>692」で示した Win32 import library は、Windows のシステム DLL
をリンクするための小さなライブラリ。例えば、
libcomctrl32 をリンクしていても、実際は、comctrl32.dll が動的リンク
される。libcomctrl32.a は、MinGW32 が用意している import library で:
/xxx/CodeBlocks/MinGW/lib/libcomctl32.a # 86,428 bytes
C:/WINDOWS/system32/comctl32.dll # 617,472 bytes
のように、windows/system32 の comctrl32.dll を動的リンクするための
呼び出し部分だけを提供する小さなライブラリ。
710デフォルトの名無しさん
2014/09/01(月) 08:18:53.15ID:1emh7fCQ map出力して何がリンクされてるか見れば?
レスを投稿する
ニュース
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 立民・岡田氏の質疑「不適切」 維新・藤田氏、台湾有事答弁巡り [蚤の市★]
- 4:44:44.444
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- そもそも日本て中国に日沈む国だとか無礼な事言ってたよね
- アニメでよく日本人キャラなのに目の色だけ変えたりしてるのあるじゃん?
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- 高市早苗って「わざと」日本畳んでるよな? [419865925]
