【GUI】wxWidgets(旧wxWindows) その5【サイザー】at TECH
【GUI】wxWidgets(旧wxWindows) その5【サイザー】 - 暇つぶし2ch442:デフォルトの名無しさん
12/07/15 11:07:19.04 .net
>>441
ちょっとしたコードを書いてみた
URLリンク(pastebin.com)

コンパイルが通らない原因

wxArrayStringの通常変数とポインタ変数の違いがわかっていない
C++では実体に対しては「.」でアクセス、ポインタ変数に対しては「->」アロー演算子でアクセスする
参考:URLリンク(brain.cc.kogakuin.ac.jp)

× arraystring.GetCount();
○ arraystring->GetCount();


あと関数の入り口で「wxArrayString *arraystring」と宣言されているならば
その関数内部では「*arraystring」ではなく「arraystring」でアクセスする
「*」をつけてしまうと「arraystring」のポインタのポインタになってしまう

void functestFrame::wxArrayStringfunc(wxArrayString *arraystring)
{
  for (int i=0 ; i< *arraystring.GetCount() ; i++)
   {*arraystring.Item(i);}                   ← ここもいまいち何をしようとしてるかわからん
}

443:デフォルトの名無しさん
12/07/15 11:14:03.55 .net
あと細かいことを言うと文字列の宣言を以下のようにしているようだが

wxString str1 = L"まっぎょ";

せっかく用意されているので「wxT」マクロを使った方がいい

wxString str1 = wxT("まっぎょ");

これでどのような環境でも日本語が変数に入れられるはず

444:デフォルトの名無しさん
12/07/15 21:32:47.77 .net
>>442
ありがとうございます。
サンプルをコンパイルして、実行できました。

通常変数と、ポインタ変数ですか。
リンク先を読んで理解します。

すみません、あと一点教えてください。

wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?

下記マニュアルをどのように調べればよいのでしょうか?
URLリンク(wxwindowsjp.sourceforge.jp)
URLリンク(wxwindowsjp.sourceforge.jp)



445:デフォルトの名無しさん
12/07/16 05:30:47.00 .net
>>444
>wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?

C/C++ではクラスや変数の宣言時に実体を宣言するかポインタで宣言するか決められるので
その質問はそもそもちょっとポイントがずれている

【ポインタ】
例えば
wxButton *btn1 = new wxButton(panel, wxID_BUTTON1, wxT("ボタン1"));

はwxButtonクラスをポインタ変数で宣言している
*btn1内のクラスメソッドをいじるには「*btn1->GetLabel();」と書く必要がありますよ、と
普通は大きなクラスはポインタ変数でインスタンスを作って宣言したほうが良い

【実体】
wxString myTestStr;
myTestStr = wxT("テスト文字列");
myTestStr.IsEmpty();  ← 空文字であるかどうか調べてる

>下記マニュアルをどのように調べればよいのでしょうか?

もうお気づきかもしれないが
URLリンク(wxwindowsjp.sourceforge.jp)に載っているのは
wxStringという「クラス」についてのリファレンス
wxString::Hogehoge のように「::」がくっついた後半部分がそのクラスが使用出来るメソッド(関数)

myTestStr.IsEmpty();  ← wxStringのIsEmptyというメソッドをつかっている

自分が欲しい機能をクラスリファレンスで探し、クラスを宣言してどのように使えるかは
メソッド部分を見れば良いということ。

446:デフォルトの名無しさん
12/07/16 07:23:17.68 .net
DLLよりもstaticの方が配布サイズ小さくなるな

447:デフォルトの名無しさん
12/07/16 10:56:52.47 .net
逆でわ?

448:デフォルトの名無しさん
12/07/16 11:06:12.02 .net
DLLリンクで作るともちろんexeは小さくなるけど
DLLも一緒に配布するとなるとでかくなるって意味

449:デフォルトの名無しさん
12/07/16 11:08:34.14 .net
そりゃあんたのプログラムの規模が小さいだけでわ?

450:デフォルトの名無しさん
12/07/16 11:12:44.68 .net
いや先入観無しで聞いてくれ
最初はそう思ってたんだが
確かにDLLリンクで作るとexeはめっちゃ小さい
しかし実際そこそこの規模のプログラム書いて
staticで作ってみて出来たexeが
(前者のexeに必要なDLLを合わせたサイズに比べると)
意外と小さい

451:デフォルトの名無しさん
12/07/16 11:15:19.52 .net
exe だけ配布汁!

452:デフォルトの名無しさん
12/07/16 11:22:57.42 .net
そりゃDLLはwxWidgets全部入りだしな

453:デフォルトの名無しさん
12/07/16 12:51:54.82 .net
規模によるとしか言いようがない

454:デフォルトの名無しさん
12/07/16 12:57:22.32 .net
MFC 最強ですねわかります

455:デフォルトの名無しさん
12/07/16 13:25:13.34 .net
DLLはwxWidgetsのシンボル全部入ってるけど、
staticリンクだと本体が使うシンボルだけ.aから
引っ張ってくるんだから、そうなるのは当たり前

456:デフォルトの名無しさん
12/07/16 14:12:18.33 .net
規模によるとしか言いようがない

457:デフォルトの名無しさん
12/07/16 14:13:00.02 .net
DLL ってなんのためにあるんだっけ?

458:デフォルトの名無しさん
12/07/16 14:13:47.36 .net
ワロタ

459:デフォルトの名無しさん
12/07/16 14:34:56.55 .net
wxWidgetsで作ったexeが一個(あるいは少数)しかないときはそうなるのは当たり前。
DLLのメリットが生きるのはOS等のようにexeが無数にあってさらに共通部分(API)が多い場合。
趣味でやってるならSTATICでいいんじゃね?

460:デフォルトの名無しさん
12/07/16 14:56:37.82 .net
めずらしくwxWidgetsスレが伸びている・・・

461:デフォルトの名無しさん
12/07/16 15:55:58.62 .net
規模によるとしか言いようがない

462:デフォルトの名無しさん
12/07/16 15:56:38.27 .net
2.9.4 出たからな

463:デフォルトの名無しさん
12/07/16 16:19:03.02 .net
2.9.4 はまだ Development だよね。

いつ Stable になるんだよ、まったく。

464:デフォルトの名無しさん
12/07/16 16:28:29.73 .net
馬鹿には無理

465:デフォルトの名無しさん
12/07/16 17:57:49.06 .net
馬鹿には無理さんは帰って、どうぞ

466:437
12/07/16 19:32:54.08 .net
事故解決しました。
リンカ設定ではディレクトリで vc_dll の方を指定していたのですが、
PreprocessorDefinitions に WXUSINGDLL が抜けていたため、
static link しようとしてシンボル未解決になっていたようです。

467:デフォルトの名無しさん
12/07/16 19:53:09.82 .net
URLリンク(wiki.wxwidgets.org)

468:デフォルトの名無しさん
12/07/16 19:55:20.02 .net
そうそう。
それです。

469:デフォルトの名無しさん
12/07/17 23:59:29.64 .net
>>445
レスありがとうございます。
>>その質問はそもそもちょっとポイントがずれている

ポインタ渡し、参照渡しを調べていたのですが、勘違いしていたようです。

int,charなどの型の場合・関数の場合・クラスの場合と大体は似ているようですが、
クラス内の機能を使用するときには、->を使わないとだめなことがなんとなくわかりました。

void functestFrame::OnButton2Click(wxCommandEvent& event)
{
wxString str1 = wxT("まっぎょ");
functestFrame::wxStringfunc(&str1);
}
void functestFrame::wxStringfunc(wxString* str)
{ wxMessageBox(*str);
str -> Last();}

教えてもらったとおりやると、コンパイルと実行ができ、str.Lastとやればコンパイルエラーがでました。

間接参照演算子の*strの使い方で勘違いしていました。
あくまで、データをみるだけで、クラス等のpointer渡しの場合かつその機能を使う
場合は、->を使うんですね。

ありがとうございました。


470:デフォルトの名無しさん
12/07/18 09:07:55.01 .net
全然違うw

C++の初心者用入門本読んで勉強汁

471:デフォルトの名無しさん
12/07/18 13:24:00.41 .net
wxWCharBuffer の使い方が良く判りません。

472:デフォルトの名無しさん
12/07/23 08:38:27.68 .net
過疎

473:デフォルトの名無しさん
12/07/23 13:34:00.85 .net
過疎かあ

474:デフォルトの名無しさん
12/08/10 14:24:37.30 .net
わからないことがあるので、教えてください。

URLリンク(fossies.org)
のソースの中で、149行目と150行目の : は何という演算子で、どのようなことをしているのでしょうか? 
149 MyFrame::MyFrame(wxFrame *frame, const wxString& title)
150 : wxFrame(frame, wxID_ANY, title, wxDefaultPosition, wxSize( 200, 100 ) )

149行目は、コンストラクターというのはなんとなくわかりますが、その後の演算子?がなにをしているのかが
わかりません。

検索しても、スコープ演算子はでてくるのですが、: 一個だけの演算子の意味がでてきません。

試しに、150行目に該当する部分をコメントアウトしてみると、ビルドは通りますが、実行しても何も表示されません。

{}の中に、 wxFrame(frame, wxID_ANY, title, wxDefaultPosition, wxSize( 200, 100 ) );を追加してビルドして
実行しても何も表示されません。








475:デフォルトの名無しさん
12/08/10 14:33:22.20 .net
すいません、リンク先の内容が質問したい内容と同じではありませんでした。

実際は、C:\wxWidgets-2.9.3\samples\sockets\client.cppの内容をビルドしながら理解しようとしています。

client.cpp
// frame constructor

MyFrame::MyFrame() : wxFrame((wxFrame *)NULL, wxID_ANY,
_("wxSocket demo: Client"),wxDefaultPosition, wxSize(300, 200))

ここのコンストラクタの後の、: の演算子?であっているのかどうかも不明なのですが・・・
これは何をしているのでしょうか?



476:デフォルトの名無しさん
12/08/10 14:58:02.41 .net
>>475
MyFrameは多分継承したクラスなので、基底クラスであるwxFrameのコンストラクタを呼び出している。

477:デフォルトの名無しさん
12/08/10 14:59:37.21 .net
あげちゃった・・・。Orz

478:デフォルトの名無しさん
12/08/10 15:15:07.17 .net
>>476

教えてくれてありがとうございます。
継承と基底クラスを調べてみます。


479:デフォルトの名無しさん
12/08/10 16:12:34.61 .net
若き日のヴィドゲンシュタインがよみがえったように


480:デフォルトの名無しさん
12/08/10 16:21:56.40 .net
連結グラフ G=(V,E) と重み d:E->R+が与えられたとき 最小木を求めよ。

481:デフォルトの名無しさん
12/08/14 17:06:28.44 .net
演算子?ではありませぬ

482:デフォルトの名無しさん
12/08/28 18:53:02.77 .net
初期化リストじゃね?

483:デフォルトの名無しさん
12/08/31 17:18:28.13 .net
wxStaticBitmapに透過png画像を指定して描画しても、
透過になってくれてないようなのですが、
単にwx.BITMAP_TYPE_PNGで読んだものを貼るだけじゃ駄目なんでしょうか?

484:デフォルトの名無しさん
12/08/31 18:43:26.98 .net
wxInitAllImageHandlers() の呼び忘れや
png を作成したソフトが原因で正常に透過処理されないとかかなあ
サンプルのimage参考にするといいと思うよ

485:デフォルトの名無しさん
12/08/31 22:09:21.20 .net
wxPython in action の翻訳版が・・・
URLリンク(www.slideshare.net)


486:デフォルトの名無しさん
12/08/31 23:26:46.41 .net
スライド565ページって、出版じゃないのかー。
それでも俺は原書を選ぶぜ。

487:デフォルトの名無しさん
12/08/31 23:48:10.30 .net
webはスライドだけど
savefileボタン押したら
普通にPDFが落ちて来た

488:デフォルトの名無しさん
12/09/01 02:49:55.50 .net
・wxAuiPaneInfoで、一度設定したCaptionをCaptionVisibleのtrue, falseで切り替えたいけど
なぜか反映されん、なんでだぜ

wx 2.9.4使ってみた

・GTK環境 wx2.8でSetSizer呼んだ後Fit呼ぶと異常終了するバグが2.9.4では直ってた
・同じくGTK環境 wxListctrlでwxLIST_AUTOSIZEしても、自動でカラムの幅が調整されない
(なんかメーリス見たらwxPythonのロビンさんが「まだ直ってないの?」みたいなこと書いてた。誰か直して。)

489:デフォルトの名無しさん
12/09/01 04:53:40.84 .net
GTKは糞

490:デフォルトの名無しさん
12/09/05 19:33:35.92 .net
GTK+ は多段タブも実現できんのだな
WindowsにできてGTKにできんことが結構見えてきた

ミゲルさんもこんなこと書いてるし、Linuxのデスクトップはダメだな
URLリンク(www.yamdas.org)

491:デフォルトの名無しさん
12/09/06 09:29:27.19 .net
>>489
またおまえか
巣に帰れ

492:デフォルトの名無しさん
12/09/06 09:57:24.07 .net
何度でも言うよ
欠かさず言うよ
GTKは糞

493:デフォルトの名無しさん
12/09/06 17:47:43.41 .net
>>492
おっさんなにやってん?

494:デフォルトの名無しさん
12/10/15 03:49:13.19 .net
eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS
Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz
LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ
ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6
1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa
A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1
9JpzFQBRXmeP

495:デフォルトの名無しさん
12/10/24 22:55:14.82 .net
大量削除の危機を生き延びたんだな

496:デフォルトの名無しさん
12/11/01 21:43:39.40 .net
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

497:デフォルトの名無しさん
12/11/17 01:59:11.60 .net
hosh

498:デフォルトの名無しさん
12/11/18 17:34:28.86 .net
wxWidgetsって、gtkを呼び出す抽象的なレイヤになるの?

499:デフォルトの名無しさん
12/11/18 18:00:39.95 .net
OSとかbuildしたときの設定による
Windows版なら今は直接Win32API呼んでるはず

500:デフォルトの名無しさん
12/11/19 00:34:29.96 .net
>>498
抽象的なレイヤって言い方が引っかかるけど
どのプラットフォームでも同じコードで動くよ

501:デフォルトの名無しさん
12/11/19 02:31:32.83 .net
gtkを呼び出す抽象的なレイヤなんてないよ

502:デフォルトの名無しさん
12/11/20 14:03:35.35 .net
wxGtkって何なんだ?

503:デフォルトの名無しさん
12/11/20 14:05:16.89 .net
具象的

504:デフォルトの名無しさん
12/11/20 16:40:02.72 .net
gtkをwxWidgetのバインディングで呼出してんだから抽象的じゃないの?
具象的だと日本語おかしくね?

505:デフォルトの名無しさん
12/11/20 16:46:58.65 .net
gu
taite
ki

506:デフォルトの名無しさん
12/11/22 21:38:02.68 .net
>>505
はいはいワロス

507:デフォルトの名無しさん
12/11/22 23:26:03.48 .net
>>506
ひでー

508:デフォルトの名無しさん
13/01/10 03:31:25.47 .net
>>492
何度も言うよ
残さず言うよ
だろ
>>493
中途半端なつっこみするなら黙ってろよムズムズする

509:デフォルトの名無しさん
13/01/10 07:36:12.49 .net
何度でも言うよ
欠かさず言うよ
GTKは糞

510:デフォルトの名無しさん
13/01/10 16:50:22.28 .net
マイナーGUIスレを見たけど、以前はFOXが人気だったんだね
まだ息してるのかな

511:デフォルトの名無しさん
13/01/10 16:53:16.15 .net
今はもう、QtかWxWidgetsの二択にしか見えない。気のせい?

512:デフォルトの名無しさん
13/01/11 08:37:58.62 .net
FortranプログラムのGUIシェルをwxWidgetsで作ろうとsampleのexecを改造しているけれどよくわからない。
いい本ないでしょうか。
最近wxPythonの本が出ましたがパイプまでは書いていないので…

513:デフォルトの名無しさん
13/01/11 09:01:20.21 .net
eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS
Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz
LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ
ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6
1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa
A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1
9JpzFQBRXmeP

514:デフォルトの名無しさん
13/01/13 12:10:17.65 .net
64bit版MinGWでwxWidgetsコンパイルしてるけど
作ったバイナリが起動すらしないので死にそう

515:デフォルトの名無しさん
13/01/14 01:59:27.93 .net
コンパイルできた
64bitネイティブアプリや、どや

516:デフォルトの名無しさん
13/01/15 01:35:39.03 .net
windows7を使用しています。

URLリンク(wiki.wxwidgets.org)
を参考に拡張子が、csvとtxtのファイル名のみを取得しようとしています。

wxDir::GetAllFiles(dir , &filename ,wxT("*.txt"));
wxDir::GetAllFiles(dir , &filename ,wxT("*.csv"));
filespecが一つのときは指定拡張子のみ取得できます。

wxDir::GetAllFiles(dir , &filename ,wxT("*.csv;*.txt"));
2個指定すると何も取得されません。

指定方法が悪いと思うのですが、どのようにすればいいのでしょうか?
教えてください。

517:デフォルトの名無しさん
13/01/15 06:14:19.90 .net
URLリンク(trac.wxwidgets.org)

518:デフォルトの名無しさん
13/01/15 06:31:29.95 .net
分からないならレスしないでください

519:デフォルトの名無しさん
13/01/15 17:15:14.30 .net
>>517
レスありがとう。
一つしかサポートされないのですね。

ありがとうございました。

520:デフォルトの名無しさん
13/01/16 15:50:20.31 .net
なんで
URLリンク(wiki.wxwidgets.org)
を参考にすると
wxDir::GetAllFiles(dir , &filename ,wxT("*.csv;*.txt"));
が出てくるんだろ
基地外か

521:デフォルトの名無しさん
13/01/16 23:31:49.99 .net
wxWidgetsを使おうとしてる時点でオカシイのだ(・∀・)

522:デフォルトの名無しさん
13/01/17 18:18:55.83 .net
童貞乙

523:デフォルトの名無しさん
13/01/19 07:42:35.24 .net
この道はいつか来た道♪ああ そうだよあかしやの花が咲いてる

524:デフォルトの名無しさん
13/01/20 02:49:05.26 .net
windowsで変な抽象レイヤなんて触るなら、c#使った方がマシ

525:デフォルトの名無しさん
13/01/21 20:07:51.79 .net
wxRubyでWindowsのイベントを捕まえたいのですがどのようにすれば出来ますか?
C++なんかだとMSWWindowProcをオーバーライドすることで出来るみたいですが
wxRubyには見あたらないような・・・

526:デフォルトの名無しさん
13/01/21 23:44:55.73 .net
Ruby を Windows で使う人って()

527:デフォルトの名無しさん
13/01/21 23:59:56.58 .net
【ActiveScript】RubyをWindowsで使うスレ【GUI】
スレリンク(tech板)

528:デフォルトの名無しさん
13/01/23 01:57:17.09 .net
>>521
MFCを直に触りたくないとき、他に候補なんてある?

529:デフォルトの名無しさん
13/01/23 04:51:35.91 .net
Qt

530:デフォルトの名無しさん
13/01/23 07:01:30.47 .net
CLX, GTK+, Qt, Tk, FLTK, FOX

C言語/C++ベースおよびマルチ言語ベース
ウィジェット・ツールキット - Wikipedia

531:デフォルトの名無しさん
13/01/23 07:03:10.89 .net
Agar
CEGUI
GLUI
Juce
Ultimate++
Visual Component Framework (VCF)
YAAF

532:デフォルトの名無しさん
13/01/30 12:24:11.63 .net
MFCならWindowsのみで動けばいいんだろ

WTL
OWLNext

533:デフォルトの名無しさん
13/01/31 05:40:10.73 .net
このひとまた変な本出してるな
URLリンク(www.amazon.co.jp)
このひとの他の本酷かったから買うつもり無いけど

534:デフォルトの名無しさん
13/02/28 14:11:47.04 .net
またバグを発見してしまった

URLリンク(docs.wxwidgets.org)

wxInputStream::LastRead
size_t LastRead() const

LastReadをlinuxで使うと常に0で返ってくる。
6年前に修正されてるはずだけどbranchに入ってないからバグったまんまですかVZさん。。。

535:デフォルトの名無しさん
13/02/28 14:13:49.27 .net
チケットは以下

URLリンク(trac.wxwidgets.org)

536:デフォルトの名無しさん
13/02/28 14:15:06.81 .net
そうか、 2.8のブランチには入ってるけど2.9には反映されてないのか、どちらにせよだめぽ

537:デフォルトの名無しさん
13/03/01 00:54:34.59 .net
wxInputStreamなんて使わんから

538:デフォルトの名無しさん
13/03/01 01:16:17.90 .net
馬鹿には無理

539:デフォルトの名無しさん
13/03/01 08:18:29.29 .net
wxWidgets は正規表現とか、
文字コードの変換がいまいち信用出来ないので、
window のフレームワークだけに使って、
基本的なロジックは boost とかで済ますのが正解。

540:デフォルトの名無しさん
13/03/16 15:59:13.75 .net
wxwidgetsのListCtrlのカラムに直接描画したいんだけどどうしたらいい?
具体的には、ダウンローダなどによくあるようなダウンロード状況を表す
横棒のグラフに%が表示されてるような奴なんだけど

541:デフォルトの名無しさん
13/03/16 16:03:03.35 .net
馬鹿には無理

542:デフォルトの名無しさん
13/03/31 11:08:01.89 .net
ググったら>>64がヒットした。
x64のgcc4.7以降でソースからコンパイルすると途中でcc1plusが止まった
x64のvc9じゃ止まらない。更新途絶えてるから修正期待するのは無理か

543:デフォルトの名無しさん
13/03/31 13:02:54.41 .net
>>64
>>542

共有ライブラリもしくはモノリシックライブラリをビルドする場合、公式のMinGWだとメモリを使い果たしてしまう
TDM-GCCに切り替えた上で CXXFLAGS='-fno-keep-inline-dllexport' を付けて configure実行するよろし

これはwxWidegts側のバグと言うよりもMinGWのバグだ

544:デフォルトの名無しさん
13/04/01 01:17:29.35 .net
>>543
あらゆるオプションくっつけてもダメだった
FLTKはvcでもgccでも問題なかったんだけどな、これgccじゃなくてmingw側の問題なのか

545:デフォルトの名無しさん
13/04/01 01:21:48.05 .net
wxWidgetsってVisualStudio2012で動く?

546:デフォルトの名無しさん
13/04/01 05:07:51.79 .net
>>545
普通にVS2012でビルドして使ってるよ

547:デフォルトの名無しさん
13/04/01 07:42:14.94 .net
昨晩発見、mingw-w64-dgnってトコのパッチ当てたらx64MinGWでもビルド出来た。
gccはTDM4.7.1、時間が無いのでconfigureのオプションくっつけて無いけど一発で通った

具体的には、textentry.cppの#include <shlguid.h>を削除するだけ

548:デフォルトの名無しさん
13/04/04 14:07:26.83 .net
ハードディスクのMBR領域をバックアップしたいんだけど
どうやってプログラム書いたらいいかな

Linuxのときは/dev/sdaを開いて読むだけだったけど
Windowsとコード一緒にできない

549:デフォルトの名無しさん
13/04/04 14:19:00.69 .net
共通の方法は無いかって話?

550:デフォルトの名無しさん
13/04/04 15:10:10.41 .net
dd.exe のソース見ると良い

551:デフォルトの名無しさん
13/04/04 15:49:15.97 .net
そうするわ
でもパスカルわかんねーんだよな・・・

552:デフォルトの名無しさん
13/04/04 16:02:05.02 .net
wxWidgets 関係の話?

553:デフォルトの名無しさん
13/04/09 09:13:04.65 .net
wxPythonなんですがベジエ曲線を書くにはどうすれば良いですか?

554:デフォルトの名無しさん
13/04/09 18:52:10.99 .net
描画系クラスならwxDC使えばいいんじゃないかなあ
URLリンク(docs.wxwidgets.org)

555:デフォルトの名無しさん
13/04/10 11:56:17.56 .net
出来ました
ありがとうございました
URLリンク(docs.wxwidgets.org)

556:デフォルトの名無しさん
13/06/24 15:12:38.36 .net
Latest Development Release: 2.9.4
Current Stable Release: 2.8.12
Previous Stable Release: 2.6.4
URLリンク(www.codeproject.com)

557:デフォルトの名無しさん
13/06/26 18:58:08.93 .net
Mac OSX LionだとwxWidgets 2.8 がビルドできない・・・
wxWidgets 2.9ビルドするとダイナミックリンクライブラリが一部作成されない・・・
Mac PortのwxWidgets-devをダウンロード するのが一番良さげ

あとMac OSXでpthreadをバイナリにリンクさせたらいきなり実行ファイルが落ちやがる
罠多すぎだろあのOS

558:デフォルトの名無しさん
13/06/26 19:01:52.04 .net
URLリンク(www.HackInt0sH.org)

559:デフォルトの名無しさん
13/07/17 NY:AN:NY.AN .net
wxWidgets-2.9.5では>>429で言ってたバグが直ってるぞ、やったぜ

560:デフォルトの名無しさん
13/08/24 NY:AN:NY.AN .net
wxってlispで使えますか?

561:デフォルトの名無しさん
13/08/24 NY:AN:NY.AN .net
馬鹿Lisperには無理

562:デフォルトの名無しさん
13/08/24 NY:AN:NY.AN .net
lispなんて使ってかっこつけやがって

563:デフォルトの名無しさん
13/08/30 NY:AN:NY.AN .net
みなさんお世話になりました
明日で2ch終了らしいので
今のうちに最後のご挨拶をしておきます

564:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
wxWidgetsのコミッタのVadim ZeitlinがC++11でwxWidgets書いてるぞ

wxWidgets and C++ 11
URLリンク(wxwidgets.blogspot.com)

565:デフォルトの名無しさん
13/08/31 NY:AN:NY.AN .net
時既におすし

566:デフォルトの名無しさん
13/09/06 17:26:06.71 .net
URLリンク(chrome.blogspot.jp)
URLリンク(itpro.nikkeibp.co.jp)
URLリンク(news.mynavi.jp)
URLリンク(internet.watch.impress.co.jp)

567:デフォルトの名無しさん
13/09/06 23:08:20.72 .net
>>566
昔から何度も提唱されてるブラウザによる全てのGUIの描画ですか
Googleは達成できるか

568:デフォルトの名無しさん
13/09/11 00:44:38.34 .net
Firefoxって知ってる?

569:デフォルトの名無しさん
13/09/20 22:19:19.81 .net
mozillaに出来なくともgoogleになら出来る

570:デフォルトの名無しさん
13/10/10 10:11:38.40 .net
wcSVG

571:デフォルトの名無しさん
13/10/16 23:19:09.83 .net
3.0.0-RC1

572:デフォルトの名無しさん
13/10/17 08:33:10.45 .net
wxD

573:デフォルトの名無しさん
13/10/17 12:18:17.29 .net
>>572
どうしてるんだろうな
そのプロジェクト...

574:デフォルトの名無しさん
13/10/20 16:58:10.15 .net
wxTcl

575:デフォルトの名無しさん
13/11/05 22:48:07.34 .net
3もRC2まで行ってるし、次は今月中に正式版出るかな

576:デフォルトの名無しさん
13/11/05 23:10:06.75 .net
出たとしたらLinuxのパッケージにwx-3.0が出て使えるようになる
楽しみ

577:デフォルトの名無しさん
13/11/13 21:36:52.45 .net
3.0.0キテタ━ヾ(゚∀゚)ノ━!!

578:デフォルトの名無しさん
13/11/14 22:26:30.66 .net
おいおい3.0だぞ?出たんだぞ?なんでこんなに盛り上がんないんだよ…

579:デフォルトの名無しさん
13/11/14 23:36:17.18 .net
メインの機能追加がUnicode対応だからなぁ
今までも別に日本語使えなかったわけではないし

580:デフォルトの名無しさん
13/11/14 23:52:35.30 .net
何言ってだこいつ
unicodeは前から使えてるっての

所感
・Mac向けビルドの安定化
・wxwebviewが全ポートで使える
→ ネットワーク接続して、html, Javascriptの解釈可能に
・aui系のバグ修正と見た目の品質向上
・c++11, clang対応
・その他即死系のバグ修正

間違ってたらすまん
とりあえず2.9で出てたバグは直ってるはず

581:デフォルトの名無しさん
13/11/15 00:03:58.47 .net
あと>>364で出てたUTF-8以外の文字列からの変換とかどうなったんだろ
うまく変換できてるなら嬉しいけど

その他にもクラスは2.8の時より増加してるよね

582:デフォルトの名無しさん
13/11/15 00:55:39.31 .net
MinGW gcc + wxWidgets 2.8.12で作っていたプログラムを3.0.0で作り直したら、
ウィンドウリサイズ時のwxStaticText、wxCheckBox、wxListBoxのフリッカーが見るに耐えんレベルになった。
かと言ってSetDoubleBufferを使うとリサイズがモタつく上に、何故かwxRadioBoxの枠線が消えるんだよなー。
仕方ない、一つ一つwxEVT_ERASE_BACKGROUNDを潰す作業を初めるか…。

583:デフォルトの名無しさん
13/11/15 03:59:07.98 .net
gcc4.8で動くなら使う
x86_64-w64-mingw32じゃ、2.9はとうとうビルドさえ無理だった

584:デフォルトの名無しさん
13/11/15 04:14:31.91 .net
4.8だとやっぱりcc1plusが停止した、しかも2.9と同じファイル
公式から落としてきたライブラリ使ってもリンクに失敗
4.7ならライブラリのビルドもリンクも問題なし

585:デフォルトの名無しさん
13/11/15 05:11:08.20 .net
あ、やっぱ出来た
パラレル無しでビルドするか>>543
CXXFLAGS='-fno-keep-inline-dllexport'
をつけると大丈夫みたい、後者だと1度止まるけど再ビルドすれば通るしサンプルもビルド出来た

586:デフォルトの名無しさん
13/11/15 06:44:39.98 .net
連投失礼、>>584-585は見なかった事にしてね
当方の環境、win7 64bit msys上からビルド、gccは4.9、静的リンクでビルド

configureにCXXFLAGS="-fno-keep-inline-dllexport"をつけてもevent.cppで止まる
その時あらためてmake CXXFLAGS="-fno-keep-inline-dllexport"としてビルドすると通る

gcc4.8だと2.9はビルドでこけるしリンクも失敗するってのは国内外でよく見かけたし、実際俺も
あきらめてたけど…ひょっとして2.9もこの方法で通ったのかなあ。

でも、なぜかサンプルのimage.exeだけ強制終了した(ビルドは可能)

587:デフォルトの名無しさん
13/11/15 07:29:00.37 .net
VCでやったほうが実行速度速くなるんじゃないの

588:デフォルトの名無しさん
13/11/15 07:40:36.25 .net
VC++?知らない子ですね…

589:デフォルトの名無しさん
13/11/15 07:53:20.59 .net
損してると思うよ

590:デフォルトの名無しさん
13/11/16 00:14:03.66 .net
constexprも使えないコンパイラは要らないんですよ

591:デフォルトの名無しさん
13/11/16 00:58:40.41 .net
メタプログラミングって奴でしょ?
何が何だかサッパリ分からないよー。
つまり俺にはまだ早い代物だという事は承知してるが、
どういう用途で使うものなのか教えてほしい。

592:デフォルトの名無しさん
13/11/16 03:33:03.68 .net
wxと同時に浸かって委員会

593:デフォルトの名無しさん
13/11/16 03:39:24.39 .net
GCC3xの頃はvc++の方が速かった気がするけど、4.6から急激に速度が向上した気がする
あくまで自作プログラムでの話だけどね
ただ、gccでビルドされる様々なテストプロブラム見てるとvc++でビルドって安全性って意味
でヤバいんじゃないかって思っちゃうの

594:デフォルトの名無しさん
13/11/16 04:27:47.92 .net
>>591
実行時の計算オーダーを減らす機能。事前計算機能だね。
コンパイルタイムにできるだけ計算して結果を出しておくことで実行時の計算量を減らす。
ネットの変人がそれでレイトレーシングやったりしてる。
C++14のやつはそれなりに簡単だよ。

595:590
13/11/16 09:47:07.37 .net
>>590はちょっと冗談気味だが
正直VC++はC++とは言えない
C++の機能を最大限活かす/楽しむにはgccやclangを使うべきだと思います
会社でプログラム書けと依頼されたらもしかしてVC++使うかもしれないけど

596:デフォルトの名無しさん
13/12/28 16:23:57.98 .net
chrome のブックマークバー、 IE のお気に入りバーのようなコントロールクラスを探しています。
全てのアイテムが編集可能でアイコンとテキストが表示されて
そのアイテムの値のテキストを編集できるメニューを作りたいのですが
最適なコントロールクラスはどれか教えてください。

wx.Menu を使おうと思ったのですが、
右クリックやコンテキストメニューのイベントが Bind しても呼び出されず苦戦しています。

wx.ListCtrl を使った場合は右クリックのイベントは受けられるのですが、
左クリックのイベントが wx.EVT_COMMAND_LEFT_CLICK のみで
これは MS Windows のみと書いてあるのでできたら使いたくありません。
これらのイベントについても誤りがあれば教えて欲しいです。

環境は wxPython 2.8-msw-unicode です。
よろしくお願いします。

597:デフォルトの名無しさん
13/12/28 17:54:40.37 .net
>>596
理想の実装になるかわからない&C++しかわからないが
wxMenuをそのまま使うのが良いと思います

実装の骨子
・メニューの項目一つ一つにwxWindowID ( enum )を振る
・wxWindowIDはwxCommandEventで起動するようにしておく
・上記のwxCommandEventを処理する関数はenumをswitch文で処理する
・wxCommandEventはEVT_MENU_RANGEで定義しておく(enum値が 1000~1200の場合反応する関数を作るなど)

アイテムを編集可能にするために
・EVT_UPDATE_UIをwxMenuに設定しておき、ユーザーがメニューの項目を触ったら更新を実施

右クリック
・wxのConnectとかBindでwxMouseEventをくっつければいいと思う

-------------------------------------------------------

上記をやろうとすると、ユーザーが設定した項目でループを回して常に更新かける
感じになるんじゃないでしょうか。

wxMenu *menu = new wxMenu;
wxMenu *foo  = new wxMenu;

for ( ユーザーが設定した数だけループ ) {

foo->Append(wxID_HOGEHOGE_RANGE + i , wxT("ユーザー設定項目1"));
foo->Connect(); // 右クリックイベントを定義しておく
}

598:596
13/12/29 12:00:00.67 .net
>>597 レスありがとうございます。

wxMenu に対して Connect/Bind を試してみたのですが、
クリックイベントは wxEVT_MENU または wxEVT_MENU_RANGE だけが呼び出されました。

LEFT_UP, RIGHT_UP, COMMAND_LEFT_UP, COMMAND_RIGHT_UP, CONTEXT_MENU のイベントを試しましたが、
こちらは EVT_MENU の有無にかかわらず呼び出されませんでした。

試したソースコード : URLリンク(codepad.org)

wxEVT_MENU の際に右クリックか左クリックかわかれば処理を分岐できるのですが、
wxCommandEvent でクリックしたボタンの情報の取得方法がわかりません。

wxWindow::PopupMenu では wxMenu を参考にして GUI を作り出すようですが、
そこですでにイベントが途絶えているように思えてしまいます。
ウィンドウハンドルも得られないようだし、
ポップアップメニューにイベントを追加することはサポートされていないように感じます。

wx.ListCtrl でも思ったことなのですが、
wx.CommandEvent 系のイベントを使うコントロールクラスでは
wx.MouseEvent 系のイベントは関連付けられないのでしょうか?

599:デフォルトの名無しさん
13/12/29 12:26:46.93 .net
>>598
う~ん、メニュー上での右クリックは悲しいことにできなさそうね

[wx-users] Trapping wxMouse events over wxMenus
URLリンク(groups.google.com)

この会話の中で、Vadimさん(wxWidgetsのコミッタ)が無理やでとか言ってる
メニューの項目の中で右クリックするとイベントはメニューのほうに行ってしまう
から、そのイベントをつかむのは無理だと。
で、それはWindowsとGTKのネイティブ実装がそうなっているから。

> Ideally, I would like to be able to left-click and
> right-click WITHOUT the menu disappearing.
This is impossible under the two main platforms: MSW and GTK. Menus grab
the mouse when popped up (down?) and so all mouse events go to them.

600:デフォルトの名無しさん
13/12/29 12:34:09.46 .net
いや、ちょっと違うか
メニューの右クリックイベントは掴めるけど
その時呼び元のメニューの項目が消えるといってるのか

その解決策としてはwxMenuを使わずに
menuのウィジェットを自分でエミュレートするしかないとのこと

601:デフォルトの名無しさん
13/12/29 13:16:30.36 .net
>>599-600
ありがとうございました。
wxMenu を流用できないのは残念ですが、
これで踏ん切りがつけたので、 wxListCtrl を使ったものを試そうと思います。

引き続き、wxListCtrl のような wxControl 派生に対して
wxMouseEvent 系のイベントをつける方法を求めていますので
何か参考になることがありましたらよろしくお願いします。

602:デフォルトの名無しさん
14/01/27 14:20:14.73 .net
了解

603:デフォルトの名無しさん
14/01/27 14:35:57.41 .net
>>601 です。 >>596 について進展したので参考になればと思い報告します。

メニューアイテムの上で右クリックしてポップアップメニューを表示することが可能なクラスが wxPython にありました。
wx.lib.agw.flatmenu がまさにぴったりのクラスでした。
RIGHT_UP のイベントはありませんが、 FlatMenuItem::SetContextMenu(FlatMenu) で >>596 でしたいことが簡単にできます。
自作のために PopupWindow あたりを調べているときに見つけました。

また何かありましたらよろしくお願いします。

604:デフォルトの名無しさん
14/02/26 17:32:22.79 .net
サンプルが多すぎて逆にわからないのですが、
ランタイム時にGUIパーツを生成消滅させることって可能ですよね?
例えばユーザが読み込んだファイルによってボタンの数を変化させるなど

605:デフォルトの名無しさん
14/02/26 17:48:08.47 .net
マジレスすると
出来ますよ

606:デフォルトの名無しさん
14/02/26 18:02:12.58 .net
ありがとうございます
関連するサンプルなどありましたら教えていただけると幸いです

607:デフォルトの名無しさん
14/02/26 18:06:08.80 .net
きっと君のHDD(SSD)に既に入ってるよω

608:デフォルトの名無しさん
14/02/26 18:19:55.82 .net
そうなんですよね~でもsample多くてどっから見ればよいか、という感じです
まあできるということがわかればとりあえず見て回ります

609:デフォルトの名無しさん
14/02/26 18:34:00.97 .net
チュートリアルで最初の方から見ればすぐ出ると思う。

610:デフォルトの名無しさん
14/02/26 18:38:10.36 .net
デモ実行してみて自分の欲しい機能と似たものを見つけたら「ソースを見る」をクリック。

611:デフォルトの名無しさん
14/02/26 18:44:29.66 .net
すいません、見てるものが違うかもしれないので確認させてください
チュートリアルとは何を指してますか?
デモはdemosフォルダの中にあるプロジェクトですよね?「ソースを見る」とはなんでしょうか?

612:デフォルトの名無しさん
14/02/26 18:48:03.88 .net
ごめん。
見てるものが違った。
wxPython の方見てた。

613:デフォルトの名無しさん
14/02/26 18:53:20.95 .net
wxPythonのDemo見て目星を付けて
wxPythonのソースを参考にwxWidgetsでCソース書くのもあり

614:デフォルトの名無しさん
14/02/26 19:08:22.51 .net
なるほど
wxPythonでコードを書いたものがC++に直接変換できたりしたら便利ですね
wxGladeみたいに

615:デフォルトの名無しさん
14/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();
この関数で子ウィジェットを全部きれいに削除できる

説明の意味がわからなければ、まずは適当なチュートリアルサイトに行くべし
おすすめ
URLリンク(zetcode.com)

616:デフォルトの名無しさん
14/02/26 20:22:35.51 .net
>>614
慣れたら直接C++で書けるから多分コンバータは需要無いよ

617:デフォルトの名無しさん
14/02/26 20:29:50.32 .net
>>615
詳しくありがとうございます
拝見致します

>>616
wxGladeも要りませんかね?
フローはwxGladeで枠を作って機能をC++で書く感じになるのかと

618:デフォルトの名無しさん
14/02/26 20:30:17.32 .net
そのくらい wx は良く出来てるね。

619:デフォルトの名無しさん
14/02/28 21:18:50.52 .net
Qt以下の品質。gtkならcで書けた。

620:デフォルトの名無しさん
14/03/01 00:37:16.59 .net
そらQtのほうがメジャーやろ、死ね

621:デフォルトの名無しさん
14/03/01 01:40:12.84 .net
どっちも1992年頃にできた。OSSといえども商業的な成功がコミュニティ形成の鍵。
それ以外はGood Oldを懐かしむロートルか宗教的価値観に支えられているだけ。

622:デフォルトの名無しさん
14/03/01 01:51:22.19 .net
GUI比較スレってなんだよね・・・
比較的な話ってここで展開してもよいものやら
というかwxWidgetとQtどっちも使ってる人っているのか

623:デフォルトの名無しさん
14/03/01 02:28:31.91 .net
世の中のアプリケーションはQtかAwt/Swingが採用される流れ。
直交性ならgtk。サクッと安定したものを書くならtk。
トイプログラムならSDL+OpenGL。生きるとは残酷なことである。

624:デフォルトの名無しさん
14/03/01 12:13:44.67 .net
バイナリサイズでかいですな
VC2010でサイズ最適化オプションかけてもHelloWorldで5MB...
これはもうどうしようもない感じ?

625:デフォルトの名無しさん
14/03/01 12:23:48.03 .net
どうしようもないっす
ベース部分(wxStringとかwxWindowとか)の定義が容量食ってるから?ではないかという疑惑

626:デフォルトの名無しさん
14/03/01 12:27:18.78 .net
うーんなるほど
ランタイムで色々判断出来るような設計なんですかねえ

627:デフォルトの名無しさん
14/03/01 12:32:32.69 .net
そうですねwxWidgetsはRTTIの仕組みが活かされてるみたいなドキュメントはどっかで見た
たぶんwxWidgetsの中核であるwxWindowクラスはそんなんばっかしなんだろう

628:デフォルトの名無しさん
14/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:デフォルトの名無しさん
14/03/05 12:45:32.18 .net
ああわかった
ディレクトリが見つかった場合のみその下も探す、ということなんだな
するとファイルのみだと当然下なんぞ無いからそれ以下を探すことはなく
ディレクトリのみ、とすると下にもいけるから最下層まで探そうとするわけか
うーん

630:デフォルトの名無しさん
14/03/05 12:55:52.46 .net
連投失礼
Traverserクラスを継承してそのOnDir関数の返り値で制御すればいいということでした

631:デフォルトの名無しさん
14/03/11 15:51:27.09 .net
浮動小数点を扱えるsliderってデフォルトではなさそうですか?

632:デフォルトの名無しさん
14/03/11 17:23:40.57 .net
たとえば 0 - 100 を 10 で割ると
0.0 - 10.0 のレンジになります

633:デフォルトの名無しさん
14/03/11 17:30:20.25 .net
やっぱそんな感じなんすね
最大値最小値現在値ラベル表示が便利だなーとおもったんですが、小数点付きでやろうと思ったら
自分でラベル付けるしかなさそうですね

634:デフォルトの名無しさん
14/03/15 21:45:40.12 w4oGcJBI.net
右側のボタンを押したら左側のパネルを再描写させたい、など
あるイベントから(親でない)ほかのイベントを誘発させたい時ってあると思うのですが
その辺に関する記事てどっかにあります?

635:デフォルトの名無しさん
14/03/15 23:13:55.37 eHN/5w2/.net
>>634
そのへんはイベント処理の領域になりますね
wxWiki見るしかない感じ

イメージとしては
Sample::LeftPanelRedraw(wxCommandEvent& event);
というイベント関数のIDがID_LeftPanelRedrawであった場合

そのイベントは
wxCommandEvent e(wxCommandEvent(wxEVT_COMMAND_BUTTON_CLICKED, ID_LeftPanelRedraw));
LeftPanelRedraw(e);
で呼べる

636:デフォルトの名無しさん
14/03/15 23:39:19.87 w4oGcJBI.net
>>635
了解です、参考にさせていただきます

637:デフォルトの名無しさん
14/03/21 12:58:58.01 hjbpSh7I.net
わかりました
wxWindowBase::wCaptureMouse()を呼び出すと以降座標とイベントが取得されるようです

638:デフォルトの名無しさん
14/03/23 17:51:04.60 cY3NJQQl.net
はい。知ってますよ。

639:デフォルトの名無しさん
14/03/23 19:26:21.87 0loqh5rV.net
いや、知らないです

640:デフォルトの名無しさん
14/05/12 21:36:09.61 d288LkW9.net
クロスプラットフォームの開発環境について調べてるんですが、wxWidgetsの
GUIは外観とかは各プラットフォームのものが使われるんですか?それとも
独自のテーマになってしまうんでしょうか?

641:デフォルトの名無しさん
14/05/12 21:48:19.14 N4i3m2/R.net
>>640
各プラットフォームのものが使われます
つまりWindowsならWIN32、LinuxならGTK、MacならCocoa
それぞれの外観になります

対してQtやTk、JavaのSwingなどは独自のテーマになります

642:デフォルトの名無しさん
14/05/12 21:58:07.29 KhXbSVtN.net
Qtってそうだったんだ

643:デフォルトの名無しさん
14/05/12 22:57:11.37 d288LkW9.net
>>641
ありがとうございます。他の環境まで概括してくださるとは助かりました。

644:デフォルトの名無しさん
14/05/13 02:25:29.32 mUTDx2p/.net
>>640
敢えてプラットフォームのを使わず
テーマ選ぶ方法もあったはず

645:デフォルトの名無しさん
14/05/23 01:42:23.54 NdcsMWjh.net
wxFormBuilder 3.4.2betaがリリースされていたので試してみたら、
wxWidgets3.0ベースのGUI描画になったおかげか、2.8をベースに作っていたレイアウトがごっそり狂った。
これから3.0で作る分にはいいと思うけど、2.8で作る分には3.4.0betaで止めておいた方が良いかも。

646:デフォルトの名無しさん
14/06/03 09:02:12.18 va6vQ78Z.net
Swiftスレ
スレリンク(tech板)

647:デフォルトの名無しさん
14/06/04 21:33:25.19 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:デフォルトの名無しさん
14/06/05 01:15:41.59 /T91KtMA.net
なんと、板移転したときに消えたのかもしれないね。

649:デフォルトの名無しさん
14/06/19 12:54:27.42 sMGAuaVR.net
wxWidgetsを使って作られたプログラムの一覧ってあったりするのかね?
とりあえずAudacityは知ってる

650:デフォルトの名無しさん
14/06/19 19:37:20.57 Brdb8B0I.net
URLリンク(www.wxwidgets.org)
とか

651:デフォルトの名無しさん
14/06/19 19:41:04.43 sMGAuaVR.net
おーありがとう
後で見て回る
テンプレにあってもいいじゃないかな?

652:デフォルトの名無しさん
14/06/19 20:07:59.88 gduOxxnf.net
車の再発見

653:デフォルトの名無しさん
14/06/19 22:56:02.45 Brdb8B0I.net
商用アプリは
URLリンク(wiki.wxwidgets.org)

654:デフォルトの名無しさん
14/08/20 15:57:43.03 TAUePqVhc
>>644
そんなんあったっけ?

655:デフォルトの名無しさん
14/08/24 18:20:53.22 Gtnn2j9y.net
wxWidgetsで、フォームを閉じる処理をして実際に閉じるまでの間に発生するイベントとかある?
.NETで言うところのOnClosingみたいな感じで。

656:デフォルトの名無しさん
14/08/25 02:12:21.61 OTL7uAT+.net
OnClose
OnVeto

657:デフォルトの名無しさん
14/08/25 14:23:49.85 IQl9g11m.net
>>656

おかげで作業が進みました。

658:デフォルトの名無しさん
14/08/26 17:09:00.43 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:デフォルトの名無しさん
14/08/26 17:09:45.00 QEgdFK7f.net
ただし、遅いのは最初の一回だけ。
一度でも表示すると後は速い。

660:デフォルトの名無しさん
14/08/26 17:56:51.72 QEgdFK7f.net
Mailer の Thunderbird-Portable なんかもマルチプラットフォーム対応
だけど、起動がかなり遅い。これも巨大な dll を読み込んだりしてる
からかな。

起動やメニュー操作が遅くなるのはマルチプラットフォーム化する代償
として負わされるのかも知れん。

こういうツールキットで軽快なアプリを作るのは難しいのかもな。

661:デフォルトの名無しさん
14/08/26 19:14:34.45 OmJCXozv.net
小規模の自作ソフトでwxWidgetsをスタティックリンクしない理由が分からん
わざわざ合計バイナリサイズを大きく、速度も遅くする理由がどこにあるのだろう

662:デフォルトの名無しさん
14/08/26 21:27:38.25 QEgdFK7f.net
>>661
なるほど、スタティックリンクにすれば、起動後になってからユーザーの
命令に対する応答が遅れる事はなくなるかもしれない。
起動が遅くなるだけで済むんなら、そっちの方がストレスが少ないかも。

663:デフォルトの名無しさん
14/08/26 21:50:56.10 JtVIC4MG.net
ある程度規模が大きくなるとスタティックリンクだと初回起動が遅すぎになので
dllにモジュールを分割してやったほうがいい
起動時のメモリへのロード時間はどうしようもないのでスプラッシュをつけてごまかす

664:デフォルトの名無しさん
14/08/26 22:39:34.76 QEgdFK7f.net
CrossBlockでは、monolithic タイプのライブラリをビルドしてから使う
ようになってるんだけど、それも遅い原因なのかな。

でも起動後にユーザー入力に対するレスポンスが遅いのはどう説明すれば
いいんだろう?

普通の Windows の仕様だと原則、起動時に全ての DLL をロードする。
LoadLibrary()を使えば動的にロードすることも可能は可能だけど、
それをする必要は旧OSでサポートしてなかった新OSのDLLをロードする
ような場合は、多言語化のサポートなど。

なるほど、多言語化のせいかも。_("xxx") みたいなのがあったから、
gettext を使ってる。それでリソースを動的ロードしているのか。

665:デフォルトの名無しさん
14/08/27 04:40:25.51 IfBPvyzm.net
何度かアプリ起動しているうちにWindowsのFetchが学習してくれて
DLLとか先読みしてくれるようにならないのだろうか

666:デフォルトの名無しさん
14/08/27 06:47:58.33 J2peHUgZ.net
>>665
それはなる。
・ディスクの内容は、メモリにキャッシュされる。
・同じDLLは、全てのアプリで物理メモリが共有されると聞いたことがある。

# >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。

それより、wxWidget 本家のソース配布に入っている samples を
Windows の mingw32 でビルドしてみたところ、全然遅くなかった。

・アプリの起動は速い。
・起動後のメニューコマンドやユーザー入力に対するレスポンスも速い。
・Aboutダイアログも瞬間ではないが、0.3秒程度で、Windows Nativeアプリ
 でも、その程度の遅さはある場合があるので遜色ない。

CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
ライブラリを使用しているからか。

667:デフォルトの名無しさん
14/08/27 07:54:18.52 X38Kg7Ty.net
>>666

># >>664 は、CrossBlockではなく、CodeBlocksだった。スマン。

なんだと思ったらわりと素人じゃねえかおい

>CodeBlocks で作ったものが遅い原因は今のところ謎。やはり monolithic な
>ライブラリを使用しているからか。

monolithicってのはwxWidgetsのモジュール全部入りのDLL作るという意味なので遅くて当然
(実際試したことないので遅いというのは初めて知ったが…)

普通は ./configure --prefix=/mingw --enable-shared みたいに指定してビルドするから
モジュールごとに分割されたDLLが作成される
Windows上で開発する時はMinGW + NTEmacs/eclipse CDTの環境がおすすめ

668:デフォルトの名無しさん
14/08/27 09:58:52.27 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:デフォルトの名無しさん
14/08/27 10:01:06.29 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:デフォルトの名無しさん
14/08/29 11:13:03.59 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:デフォルトの名無しさん
14/08/29 19:04:31.75 GS9LyL7J.net
その説明にac1だの何だの自分以外分からない定義を使う必要があったのだろうか

672:デフォルトの名無しさん
14/08/29 19:07:59.00 AEJEOYpd.net
今から見るとそうかも。
a: Windows Native or MFC
b: wzWidgets
c: CUI
g: GUI
r:release, d:debug
d:dynamic link, s:static link

673:デフォルトの名無しさん
14/08/30 00:17:55.46 S/CtHe8u.net
>>668

>最後の段落:多分、wxWidgets 本体を MInGW32 用のビルドする際は、
>configure は使えない気がする。

なにいってんだCodeBlocksのドキュメントにそう書いてあるだけで
基本autotoolsで作られたソースはconfigureでビルドできるぞ
実際自分はWindows上のmingw32/64、LinuxのクロスビルドからのMinGWでconfigure使ってる

なぜMakefileでやれという指示なのかというと、そのほうが簡潔で保守しやすいからだ
あとGNU MakeじゃないMakeでもビルドできるようにしたいとかいう微妙なこだわりが有る場合も有る

>>669
エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける
ソースのひな形自動生成機能は知らんなあ

674:デフォルトの名無しさん
14/08/30 00:21:29.81 S/CtHe8u.net
>>670
MinGWビルドでバイナリをストリップしたやつとか比較しないのか

675:デフォルトの名無しさん
14/08/30 07:56:49.02 pUv0T+7B.net
>>674
Stripに詳しくないので、言っている意味が分からない。

Stripって Release 用に Build した Binary に対して行っても
サイズダウンできたりするの?

676:デフォルトの名無しさん
14/08/30 07:58:19.03 pUv0T+7B.net
>>674
Stripに詳しくないので、言っている意味が分からない。

Stripって Release 用に Build した Binary に対して行っても
サイズダウンできたりするの?

677:デフォルトの名無しさん
14/08/30 08:15:51.54 hpIa4Qjb.net
日本語インライン入力の対応ってまだなの?
というか予定自体なくて諦めた方がいい?
wxWidgets使ってるEditraってエディタにそろそろ移行できるかなと
思って試してみたら、未だにインライン入力できない

678:デフォルトの名無しさん
14/08/30 08:19:53.34 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:デフォルトの名無しさん
14/08/30 08:22:26.84 pUv0T+7B.net
>>673
>エディタの補助機能を使うべきだ、Emacsなら矩形範囲選択で一気に書ける

詳しく:

680:デフォルトの名無しさん
14/08/30 11:51:11.86 RJxcDZkh.net
馬鹿には無理

681:デフォルトの名無しさん
14/08/30 12:02:34.82 S/CtHe8u.net
スタンド・アローン・コンプレックスと化した馬鹿には無理さんオッスオッス

>>679
cua-modeでググって
URLリンク(qiita.com)

例えばイベントテーブルとかはこれでザクッと一気に書ける
もちろん個々のwxWindowIDとメソッド定義は書かなくてはいけないが
クラス名とマクロ定義は同じ文字列の繰り返しなのでだいぶ楽になる

682:デフォルトの名無しさん
14/08/30 13:53:01.64 pUv0T+7B.net
>>681
あー、そういう風に沢山のイベントを一気に書きたいんじゃなくて、
開発段階で徐々にイベントを追加して行く際に、

1. *.h のクラス内にメンバ関数宣言
2. *.cpp に EVENT MAP
3. *.cpp に メンバ関数定義の本体

の三箇所にコードを書くのが面倒ということなんだわ。

683:デフォルトの名無しさん
14/08/30 14:33:49.98 S/CtHe8u.net
>>682
それは自分で作らないと無さげですねえ

684:デフォルトの名無しさん
14/08/30 19:11:57.66 5dlfaubU.net
wxFormBuilderでしかGUIとイベントを設計できない俺には何言ってるのかさっぱりわからんぜよ……

685:678
14/08/31 15:54:21.95 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:デフォルトの名無しさん
14/08/31 15:56:18.96 5rh0udnx.net
そんなことしなくても
DLLの依存関係調べるツールあるのに

687:デフォルトの名無しさん
14/08/31 16:01:12.95 5rh0udnx.net
ちなみにwxWidgetsで作った一番小さいexe探したら65kbのがあった

688:678
14/08/31 17:34:23.46 X+I89xFV.net
Windows実行形式であっても、コンパイラが、MinGW32 と VC++ でサイズに
大幅な違いが出てくるのかな?

689:678
14/08/31 17:41:03.82 X+I89xFV.net
>>687
それは DLL 版だよ。絶対に。

690:デフォルトの名無しさん
14/08/31 19:56:13.33 F1QgxQvq.net
>>685
実行ファイルの関数テーブルに何が入っているか nm で確認したら少しはわかるかもね

>>688
大幅とは行かないかもしれないがVC++はWindowsのみをターゲットにしているから
基本的にコンパイル後のバイナリサイズは MinGW > VC++ だよね

691:デフォルトの名無しさん
14/08/31 20:18:05.13 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:デフォルトの名無しさん
14/08/31 20:27:38.74 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:デフォルトの名無しさん
14/08/31 20:33:24.61 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:デフォルトの名無しさん
14/08/31 20:45:44.37 0aT2mco7.net
サイズはどうでもよくないか。exeを使う側としては速度では?
あとコア、主要のライブラリのビルドから、ダイナミックリンクを徹底してOSに丸投げしたら小さくなるだろ。

695:デフォルトの名無しさん
14/08/31 20:48:05.22 ks+4W1rG.net
完全テンプレートライブラリにしたら軽くなるんだろうか

696:デフォルトの名無しさん
14/08/31 20:58:57.78 da+aRwUf.net
>>694
でも wxWidgets がやっていることの割にはリンクされるバイト数が多すぎる
感じがする。
基本、Win32をラッピングしているだけなのだから、2MBも必要ない。

697:デフォルトの名無しさん
14/08/31 21:00:34.83 ks+4W1rG.net
ラッピングしてるだけじゃなくマルチプラットフォームのために徹底した抽象化をしてるんでしょ
とソースも読まず推測

698:デフォルトの名無しさん
14/08/31 21:04:00.35 da+aRwUf.net
>>697
でもソースを呼んでみたら、たとえば、wxListCtrl なんかは、
Win32 の LIST CONTROL をそのまま使っていた。
DrawRect()などで書いているわけではない。
ただし、wxGenericListCtrl だったかは、DrawRect()みたいなグラフィック
関数で独自に描画していた。が、それは、Windows版では簡単には使えない
という噂を聞いたが。

699:デフォルトの名無しさん
14/08/31 21:06:47.60 da+aRwUf.net
>>697
wxWidgets の基本設計は、Widgetは、OS nativeの物を使うが、
どんなサイズであっても対応できるように Sizer で Layout を
コントロールする、という物。

なので、抽象化はサイズと配置程度で済むはずなのだが・・・。

700:デフォルトの名無しさん
14/08/31 21:09:35.31 F1QgxQvq.net
>>696

>>697の言ってることが正しい。

---------------------
    wxWidgets
---------------------
Win32 | GTK | Cocoa etc...
---------------------

wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので
型情報・関数テーブルの情報だけで結構容量食う

>>692
ASCIIモードでビルドするのはやめておいたほうがいい
日本語使えないし

というかなぜMonolithicビルドにこだわるのか…
普通にconfigureからビルドしてdllごと配布したほうが立ち上がりは早い

701:デフォルトの名無しさん
14/08/31 23:57:56.42 da+aRwUf.net
wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。

実は、Win32 の LIST CONTROL は、

・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
 とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
 奇妙な動作をする。奇妙な動作と言ったがバグに近い。

こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。

702:デフォルトの名無しさん
14/08/31 23:59:28.64 da+aRwUf.net
wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。

実は、Win32 の LIST CONTROL は、

・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
 とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
 奇妙な動作をする。奇妙な動作と言ったがバグに近い。

こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。

703:デフォルトの名無しさん
14/09/01 00:00:47.70 X69OanmZ.net
>>700
>wxWidgetsは通常のGUI用ライブラリに一枚レイヤを重ねた形になるので
>型情報・関数テーブルの情報だけで結構容量食う

オイラはコンパイラの基本部分に詳しいが、それだけで1MBなどには
ならない。

704:デフォルトの名無しさん
14/09/01 00:06:51.19 X69OanmZ.net
>>694
諦めることも手かも知れないけど、やっている事の規模とサイズとの
ギャップに納得がいかない人もいるはず。

wxWidgetsはラッピング・ライブラリの一種。

8bit時代、16bit時代を知る人にとって、Widget 程度が64KBを超える
事があってはならない。どういうプログラミングをしたら2MBにもなる
のか。

705:デフォルトの名無しさん
14/09/01 01:16:10.03 7Pg7L2PA.net
>>703
>>704
一理あるのでちょっとメーリングリストを探ってみたり
まず、wx/wx.hがいろいろなヘッダファイルを事前にincludeしているので
それがバイナリサイズの増加の一因になっているらしい

[wxMSW]: why EXE-files are so large?
URLリンク(groups.google.com)

706:デフォルトの名無しさん
14/09/01 07:25:22.06 X69OanmZ.net
>>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
を追加しただけ。

707:デフォルトの名無しさん
14/09/01 07:31:05.33 X69OanmZ.net
誤:>>591
正:>>691

708: 【大吉】
14/09/01 07:40:36.83 zQucGkuf.net
wxWidgets の samples で ListCtrl 関連を見てみたが、ヘッダを
ドラッグしようとしてもドラッグできないので、ドラッグによる列の入れ替
えは出来ないようだった。

実は、Win32 の LIST CONTROL は、

・マウスドラッグによる自動的な列の入れ替えをした際、どこにどの列が
 行ったかを掌握するには注意が必要。動作を知るには基本的に実験を必要
 とする。
・第1カラムを削除すると第2カラム以降を削除した時とは同じとは言えない
 奇妙な動作をする。奇妙な動作と言ったがバグに近い。

こういった辺りがどう処理されているか知りたかったのだが、サンプルでは
故意か偶然か、全くそこに触れていないようだった。

709:デフォルトの名無しさん
14/09/01 07:45:41.49 X69OanmZ.net
>>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 を動的リンクするための
呼び出し部分だけを提供する小さなライブラリ。

710:デフォルトの名無しさん
14/09/01 08:18:53.15 1emh7fCQ.net
map出力して何がリンクされてるか見れば?

711:デフォルトの名無しさん
14/09/01 14:09:14.38 X69OanmZ.net
MONOLITHIC の値が違うと別の *.o が作成されることが判明。
以下は、SHARED=0(静的リンク)の場合の、MONOLITHIC が 0 と 1 の場合。

CORELIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
  $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
  $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
  $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
  $(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include \
  $(____CAIRO_INCLUDEDIR_FILENAMES) -W -Wall -DWXBUILDING -I..\..\src\tiff \
  -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib -I..\..\src\regex \
  -I..\..\src\expat\lib -DwxUSE_BASE=0 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
  -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)

MONOLIB_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG) $(__THREADSFLAG) \
  $(GCCFLAGS) -DHAVE_W32API_H -D__WXMSW__ $(__WXUNIV_DEFINE_p) \
  $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \
  $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \
  $(__MSLU_DEFINE_p) $(__GFXCTX_DEFINE_p) -I$(SETUPHDIR) -I..\..\include \
  $(____CAIRO_INCLUDEDIR_FILENAMES) -W -Wall -DWXBUILDING -I..\..\src\tiff \
  -I..\..\src\jpeg -I..\..\src\png -I..\..\src\zlib -I..\..\src\regex \
  -I..\..\src\expat\lib -DwxUSE_BASE=1 $(__RTTIFLAG) $(__EXCEPTIONSFLAG) \
  -Wno-ctor-dtor-privacy $(CPPFLAGS) $(CXXFLAGS)

712:デフォルトの名無しさん
14/09/01 14:13:21.84 X69OanmZ.net
違いは、-DwxUSE_BASE の部分で、
 MONOLITHIC = 0 の場合 : -DwxUSE_BASE=0  // #define wxUSE_BASE 0
 MONOLITHIC = 1 の場合 : -DwxUSE_BASE=1  // #define wxUSE_BASE 1
となっている。

例えば、/xxx/src/msw/dc.cpp は、同じソースに対し make に渡すオプションに応じて
以下の2種類の *.o ファイルが作成される。
1つ目は、MONOLITHIC=0の時に作られ、2つ目は、MONOLITHIC=1の時に作られる。

ifeq ($(USE_GUI),1)
$(OBJS)\corelib_dc.o: ../../src/msw/dc.cpp
  $(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif

ifeq ($(USE_GUI),1)
$(OBJS)\monolib_dc.o: ../../src/msw/dc.cpp
  $(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif

ソースを見ると、wxUSE_BASE の値に応じて場合分けされている箇所が多数ある。
つまり、MONOLITHIC の 0 と 1 の違いは単に *.o ファイルの集め方の問題では無い。
コンパイル時点のソース自体が変更されるのである。故にリンク後の*.exe のサイズ
が変わって来ても不思議は無い。これは驚くべきことである。

713:デフォルトの名無しさん
14/09/01 15:21:49.13 M8Jh9ISi.net
別に驚くほどのことじゃ無いけど

714:デフォルトの名無しさん
14/09/01 16:14:53.94 X69OanmZ.net
>>713
コンパイルオプションまで変えてしまって何をやっているかと言うこと
なんだよ。ライブラリの集め方だけの問題じゃないって事なんだ。

ライブラリの動作が変わってしまい、MONOLITHIC が 0 と 1とで結果が違うことに
悩まされる可能性もある。

単にライブラリのオブジェクトの集め方(含み方)の問題では無いとすると、MONOLITHIC
オプションの意味はいったい何かと言う問題になる。


また、最終EXEが大きくなる理由として、アプリが使ってないオブジェクトを
非常に基本的なライブラリの一部が参照している可能性がある。
そしてそのオブジェクトが別のオブジェクトを勝手に参照して・・・という
事が続いて最終EXEのサイズが肥大化してしまっているのかも知れない。

715:デフォルトの名無しさん
14/09/01 16:33:12.36 X69OanmZ.net
URLリンク(wiki.wxwidgets.org)

「MONOLITHIC=1 :
 Packages all libraries in a single file.
 (Note: do not combine this option with a static build.)」

とあった。static build の時は、MONOLITHIC=1 にするな、と
書かれている・・・。

716:デフォルトの名無しさん
14/09/01 16:49:54.89 zU7EZBBQ.net
いったい何を目的として何を検証しているんだ?

717:デフォルトの名無しさん
14/09/01 17:12:16.45 bPa0tOdz.net
このライブラリを使うなとなる。

718:デフォルトの名無しさん
14/09/01 17:31:47.05 X69OanmZ.net
>>717
そういうわけではない。

719:デフォルトの名無しさん
14/09/02 13:46:25.35 TmMSlGm8.net
configure を試してみたら、configureのヘルプ通りには行かなかった:

・以下、xxx = wxWidgets-2.8.12 とする。/xxx/ に configure スクリプトがある。

・configureを使用するために、単なるcmd.exeではなくcygwin環境が必要であった。

・cygwinを起動する際、cygwin に入ってからの PATH が、
 (MinGWのbin) : /usr/local/bin/ : /usr/bin/ : (Winからのbin)
 の順になるようにした。

・カレントを /xxx/ にして configure した。configure の引数には少なくとも

・--build=i686-pc-mingw32 --host=i686-pc-mingw32 --target=i686-pc-mingw32
 を指定し、例外, rtti, regex, zlib, jpeg, png, tiff は無効にするオプション
 を設定した。他にも無効にしたものも多い。大量に及ぶので スクリプトに記述した。

・Makefileが普段の /xxx/build/msw/ ではなく、/xxx/ に作られた。

・/xxx/samplesのサブディレクトリにあるMakefileが書き換えられた。

・setup.h が、
 /xxx/lib/wx/include/msw-ansi-releasw-static-2.8/wx
 /xxx/lib/wx/include/msw-ansi-releasw-2.8/wx
 の二箇所に作成された。元々各所にあるが、例としては
 /xxx/include/ws/msw や /xxx/lib/gcc_lib/msw/wx にある。 

・/xxx/ で make[ret] してみた。

・途中で例外を有効にするように言われたので有効にした。

720:デフォルトの名無しさん
14/09/02 13:46:50.57 TmMSlGm8.net
・regex, zlib, jpeg, png, tiff は全て無効にしていたにも関わらず、
 src/regex, src/zlib, src/jpeg, src/tiff にしかない *.h ファイルが見つから
 ないエラーとなった。。
 そこで、Makfileを直接修整して、CPPFLAGS に -I 指定によって、上記ディレクトリ
 を最後尾に追加した。

・make には成功した。

・/xxx/ に大量の *.o ファイルが作られ、*.a は /xxx/lib/ に作られた。
 /build/msw から make した場合は、/xxx/lib/gcc_lib に作られるのと対照的
 である。

・/xxx/samples/console で make してみたら、成功した。

・「プロシージャエントリポイント _gxx_persolanity_v0 が
  ダイナミック リンク ライブラリ libstdc++-6.dll から見つかりませんでした。」
  のメッセージボックスが出て起動できず。

・Makefileを書き換えて、LIBS の最後に -lstdc++ を書いても症状は治まらない。

721:デフォルトの名無しさん
14/09/02 13:48:11.36 TmMSlGm8.net
・regex, zlib, jpeg, png, tiff は全て無効にしていたにも関わらず、
 src/regex, src/zlib, src/jpeg, src/tiff にしかない *.h ファイルが見つから
 ないエラーとなった。。
 そこで、Makfileを直接修整して、CPPFLAGS に -I 指定によって、上記ディレクトリ
 を最後尾に追加した。

・make には成功した。

・/xxx/ に大量の *.o ファイルが作られ、*.a は /xxx/lib/ に作られた。
 /build/msw から make した場合は、/xxx/lib/gcc_lib に作られるのと対照的
 である。

・/xxx/samples/console で make してみたら、成功した。

・「プロシージャエントリポイント _gxx_persolanity_v0 が
  ダイナミック リンク ライブラリ libstdc++-6.dll から見つかりませんでした。」
  のメッセージボックスが出て起動できず。

・Makefileを書き換えて、LIBS の最後に -lstdc++ を書いても症状は治まらない。

722:デフォルトの名無しさん
14/09/02 16:41:02.66 TmMSlGm8.net
console.cpp の中身を printf() だけを使う4行の main() 関数だけに
書き換えてみたら問題なく起動して普通に文字列が表示された。

なので、MinGW 環境の問題ではなさそう。

723:デフォルトの名無しさん
14/09/02 17:12:10.67 TmMSlGm8.net
wxPrintf()だけを使った console 版 hello world が、static link
で 96,468 bytes で済んだ。

ところが、wxString を使った場合、作成した exe を実行しようとすると
>>721 後半で書いたメッセージ・ボックスが出て起動できない。

724:デフォルトの名無しさん
14/09/02 17:17:49.98 DoCZo715.net
libstdc++がダイナミックリンクになってるだけだろ。

725:デフォルトの名無しさん
14/09/02 17:44:29.48 TmMSlGm8.net
>>724
ダイナミックライブラリであるところの
 libstdc++-6.dll
は既に読み込めているんですわ。
「libstdc++-6.dll から見つかりませんでした。」
の「から」がそれを表している。

なお、configureを使わずに、build/msw から build したライブラリだと
wxStringとwxPrintfだけを使ったconsoleアプリは、静的リンクでも
451,584 バイトで済むことが判明。こちらはちゃんと起動できる。

726:デフォルトの名無しさん
14/09/02 19:04:52.66 DoCZo715.net
パスが通ったところに互換性のない別バージョンのdllがあるんだろ。
mingwだとsjljとdw2の2種類あるから。

727:デフォルトの名無しさん
14/09/02 19:56:42.14 TmMSlGm8.net
MinGW/bin を

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

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

728:デフォルトの名無しさん
14/09/02 20:00:33.47 TmMSlGm8.net
>>726
最初、xxx dw2 yyy.dll が見つからない、と言うメッセージ・ボックス
が出たのだが、そのdllを検索すると MinGW/bin にある事が分かって、
そこにパスを通したらそのメッセージ・ボックスは出なくなった。

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

729:デフォルトの名無しさん
14/09/02 20:55:48.58 TmMSlGm8.net
結論的に言うと、自分のローカルに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:デフォルトの名無しさん
14/09/02 21:12:01.59 WV3CuJcS.net
よかったな
-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
にすればlibstdc++とスタティックリンクできるかもな

731:デフォルトの名無しさん
14/09/02 22:46:11.97 TmMSlGm8.net
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:デフォルトの名無しさん
14/09/02 22:56:33.59 RsSqk3ed.net
もう完璧にスレ違いだな

733:デフォルトの名無しさん
14/09/02 22:56:38.09 TmMSlGm8.net
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:デフォルトの名無しさん
14/09/02 22:57:58.06 TmMSlGm8.net
>>732
wx アプリのサイズダウンの仕方関連なんだけど。

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

736:デフォルトの名無しさん
14/09/02 23:47:28.37 r9jqoPj2.net
正直wxWidgetsのバイナリサイズの話以外はほとんど既出だし
CygwinとMinGWの仕様の違い、クロスコンパイラのターゲット、configureの基本
それらの件に関しては自分のブログにでも書いていてほしい

737:デフォルトの名無しさん
14/09/02 23:54:47.98 r9jqoPj2.net
まあ一応上から目線でコメントしとくと

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

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

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

738:デフォルトの名無しさん
14/09/03 00:12:32.54 RSu3l9Ti.net
>>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:デフォルトの名無しさん
14/09/03 00:20:01.40 qMd+w6/O.net
>>738
スレ違いだ、こっちでやれ
Cygwin + MinGW + GCC 相談室 Part 7
スレリンク(tech板)

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

740:デフォルトの名無しさん
14/09/03 00:37:00.57 kYvXCnau.net
ちなみに c:\cygwin\bin と c:\cygwin\usr\local\bin にパスを通せば、
cmd.exe からでも cygwin のコマンドが実行できるようになる。
gccもlsもmakeも。ここでbashを起動すればcygwin環境になる。

741:デフォルトの名無しさん
14/09/03 08:47:34.91 VnTCGwbS.net
久しぶりに2ちゃん観に来たら
wxのスレめっちゃ野比てて嬉しい

742:デフォルトの名無しさん
14/09/03 14:50:56.74 kYvXCnau.net
wx のソースを修正したら、wxString() を使った最小サンプルが、
静的リンクしても 70KB で済むようになった。

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

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

743:デフォルトの名無しさん
14/09/03 15:05:09.35 SXoWEkGr.net
wxというよりgccとライブラリのお話で伸びている

744:デフォルトの名無しさん
14/09/03 16:58:33.04 3zk9T5qQ.net
>>742
dllの依存関係すらまともに調べられないのか
dependency walkerとかobjdumpとか使え

745:デフォルトの名無しさん
14/09/03 17:02:39.87 SXoWEkGr.net
mingw入ってるならlddコマンドでもいける>依存動的ライブラリ

746:デフォルトの名無しさん
14/09/03 18:30:34.52 kYvXCnau.net
ただ、パス設定を空にして起動できるかどうか見るのも1つの確実な方法。

747:デフォルトの名無しさん
14/09/04 03:37:02.91 FQO1vG1R.net
性格悪いな。
コンピュータ・ソフト関連の人って。

748:デフォルトの名無しさん
14/09/04 17:23:39.03 FQO1vG1R.net
GUIアプリのサイズ縮小を試みていたが、断念するかも知れない。

749:デフォルトの名無しさん
14/09/04 18:46:24.22 Sd68Xi30.net
△性格が悪い
○無駄が嫌い
◎無駄な事をしてる奴が嫌い

750:デフォルトの名無しさん
14/09/05 15:14:57.29 PbioWCRT.net
>>749
何も悪いことをせず、自分にも害を与えない人を嫌うのが性格が悪いんだよ。

751:デフォルトの名無しさん
14/09/05 15:46:20.79 JjYqHkIR.net
公園の蚊を駆除するのに外側からじゃなくて内側から始めるとかが無駄
自分にも危害が及ぶので嫌

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

753:デフォルトの名無しさん
14/09/05 18:18:43.88 NH0YjWIH.net
>>751
正直言って、今回のこととの関連も分からない。
それ以前に外側から、内側から、ということの意味が全く分からない。
まるで会話ロボットが生成した文書のようだ。

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

754:デフォルトの名無しさん
14/09/05 22:33:12.96 Mt1E1+r6.net
俺の大好きなwxWidgetsスレがめちゃんこ糞スレになって泣きそう

755:デフォルトの名無しさん
14/09/05 22:52:37.72 rFI2iHSs.net
案の定あらし化したか
これ以上触れないで放っとくの推奨

756:デフォルトの名無しさん
14/09/10 10:22:55.86 8Y3LAJyJ.net
wxWidgets って、GTK をバックエンド(port to)に使うことも出来るらしい
ね(wxGTK)。

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

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

757:デフォルトの名無しさん
14/09/10 18:37:52.75 /KH51cxp.net
      \       ヽ           |        /        /
          \      ヽ               /      /
‐、、         殺 伐 と し た ス レ に 鳥 取 県 が ! !      _,,-''
  `-、、                  __/\            _,,-''
      `-、、              _|    `~┐         _,,-''
                      _ノ       ∫
                  _,.~’        /
────‐     ,「~             ノ    ────‐
               ,/              ` ̄7
                |     島 根 県     /
           _,,-'   ~`⌒^7            /    `-、、
        _,,-''            丿            \,      `-、、
 ,'´\           /  _7       /`⌒ーへ_,._⊃         /`i
 !   \       _,,-┐    \    _,.,ノ          r‐-、、      /   !
 ゙、   `ー--<´   /      L. ,~’             ゙、  >-一'′   ,'
  y'  U      `ヽ/     /            ヽ      ヽ '´     U   イ
                                ____
         /      __        |       \____\
    ___/__ / ̄    ____|____ \ \____\
       //ヽ   /___         /|\       \ \____\
     / / ヽ  / /__     /  |  \       \_______
   /  /   / /   /     /    |    \          |    \
  /   /  / /  _/   __/      |      \__      |     \  ̄―_

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

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

759:デフォルトの名無しさん
14/09/11 07:34:16.28 BpRRpzGv.net
wxQtってなんかメリットあるの?

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

761:デフォルトの名無しさん
14/09/12 10:47:54.87 w24nfmYL.net
wxWidgetsで、POPUP Menu (Windows では、Context Menu が正式名称かも)を作る場合、
どうしてますか?

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

762:デフォルトの名無しさん
14/09/12 11:29:17.36 vSDiSYyP.net
MenuItem作って
SubMenu作って
AddItem

763:デフォルトの名無しさん
14/09/12 11:47:23.49 S8WOzChk.net
>>762
それは手作業の場合ですよね。
そこの部分は対した手間ではないですが、
イベント・ハンドラを*.cpp, *.h, EVENT_TABLEの全てに書くのが面倒で。

764:デフォルトの名無しさん
14/09/12 11:47:52.57 vSDiSYyP.net
どうぞ
URLリンク(www.youtube.com)

765:デフォルトの名無しさん
14/09/12 12:20:43.41 k4huCAJU.net
>>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:デフォルトの名無しさん
14/09/12 12:28:57.27 ylwL1QX/.net
馬鹿には無理

767:デフォルトの名無しさん
14/09/12 14:27:34.99 8yVPY0Zt.net
7個のメニュー項目にイベント結びつけるのに7行コード書くのって、そんな突出して面倒か?

768:デフォルトの名無しさん
14/09/12 15:27:57.79 mqgnzDe4.net
>>767
それは、「EVENT_TABLE」の箇所だけの話で、実際は、*.h に
メンバ関数宣言を7つ書き、*.cpp に
Zzzz Ccccc::OnXxxxx( Yyyy *pYyyy )
{
return Qqqqq;
}
みたいなの(4行)を 7 つ書く必要がある。

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

769:デフォルトの名無しさん
14/09/12 16:36:39.60 ylwL1QX/.net
IBみたいなのを期待したら駄目

770:デフォルトの名無しさん
14/09/12 19:11:10.85 cDGrnlyB.net
なんで今更wxSmithなんだよ古臭いな
なんでイベントテーブル使ってんだよ古臭いな
黙ってwxFormBuilder使ってみろよメッチャ簡単で笑えるぞ


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch