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


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

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

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

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

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

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

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

ここまで見た
  • 777
  •  
  • 2014/09/13(土) 07:40:07.50
>>776
これは、どうやって作ったの?
生成されたコードも参考にはなるけど、wxFormBuilder上での操作方法が
知りたい。

ここまで見た
  • 778
  •  
  • 2014/09/13(土) 16:39:39.92
>>777
説明がめんどくさいから、wxFormBuilderでこの「wxMenuTest.fbp.」を開いて確認してくれ。
あとは適当に触ってれば理解できるだろ。
http://www.dotup.org/uploda/www.dotup.org5310926.zip.html

適当にGUIを作ったらF8キーでメインクラスを生成して、
その後F6キーでサブクラスを生成すればいい。

あとは添付した「main.cpp」みたいなコードを書いてビルドすれば目出度くGUIプログラムの完成だ。

ここまで見た
  • 779
  •  
  • 2014/09/13(土) 17:37:50.07
レイアウトやイベントの仕様が
前もって分かって一発で決まるようなものならいいけど
そうでない場合は細かいテクが必要になるんだよなぁ
VB,delphi,VisualStudio他のポトペタとは違って
基本クラスや継承クラスの生成コードは
上書きしちゃってよしなにしてくれないから目視マージが必要になる
で、それならxrcでいっかなとなったりとね
あとは最近のバージョンでは修正されてるかも知らないけど
splitter > panel > sizer > xxx
の深いネストが嫌いだったな
バグだよね

ここまで見た
  • 780
  •  
  • 2014/09/13(土) 18:03:46.11
>>778
出来れば言葉で説明していただけるととても有難いんだけれども。

ここまで見た
  • 781
  •  
  • 2014/09/13(土) 18:20:32.24
>>776
MyProject1MyFrame1.cpp に、

void MyProject1MyFrame1::m_button1OnButtonClick( wxCommandEvent& event )
{
  // TODO: Implement m_button1OnButtonClick
  this->Close();
}

と類似の行が沢山あるけど、this->Close() 以外は、wxFormBuilder が自動生成したとのことで Ok ?

>>779
>基本クラスや継承クラスの生成コードは
>上書きしちゃってよしなにしてくれないから目視マージが必要になる
>で、それならxrcでいっかなとなったりとね

この辺りとの関連が知りたい。自分で書いたコードが勝手に上書きされて消されてしまうということ?

ここまで見た
  • 782
  •  
  • 2014/09/13(土) 18:22:33.01
そもそも wxFormBuilder って、人間が書いたコードと「マージ」や「アペンド」する機能は全くなくて、
デザイナのテキスト領域に表示されるコードをコピペして使う程度の事しかできないのかな?

ここまで見た
  • 783
  •  
  • 2014/09/13(土) 18:27:14.64
xrcはwxFormBuilderだとwxRibbonとかで生成に抜けがあるよね
これ自体はそのうちなおるだろうけど、案外使われてないのかなxrc

ここまで見た
  • 784
  •  
  • 2014/09/13(土) 18:54:43.70
class MyFrame1 : public wxFrame {・・・};
class MyProject1MyFrame1 : public MyFrame1 {・・・};

となっていて、

http://stackoverflow.com/questions/8255753/how-to-add-personal-code-into-wxformbuilder-generated-class



・build your frame/panel in formbuilder
・generate inherited class
・implement your handling code in inherited class
・make changes to form/panel in wxFormbuilder ->
 will only affect generated class, not inherited class

の最後の行と矛盾するね。

wxFormBuilder は、MyFrame1 は書き換えるが、それを継承した所の MyProject1MyFrame1 は、最初の
一回しか書き換えない(というよりユーザーが指示しないと生成しない)、ということらしいから。

ここまで見た
  • 785
  •  
  • 2014/09/13(土) 18:57:59.23
つまり、>>781 のイベント・ハンドラにおいて、this->Close(); の外側の部分も手作業で
書くしかないのではなかろうか?

そして、対応する *.h ファイルの中に、同じ関数のメンバ関数宣言も手作業で追加するしかないのでは?

ここまで見た
  • 786
  •  
  • 2014/09/13(土) 19:05:46.06
実装の中身以外は何一つ手では書かないっていうなら、wxWidgetsは投げ捨てて
QtCreator有するQtか、C++ Builderあたりを使うしかないよ。
wxFormBuilderはIDEじゃないし。

ここまで見た
  • 787
  •  
  • 2014/09/13(土) 19:07:33.52
>>786
QtCreator では、それが出来るのかな?

ここまで見た
  • 788
  •  
  • 2014/09/13(土) 19:09:46.08
XRC最強なんですけど

ここまで見た
  • 789
  •  
  • 2014/09/13(土) 19:18:48.99
>>785
言葉通りに受け取ってくれればいい。
本当に「this->Close();以外書いてない」んだ。
つまり関数実装部は全て自動生成される。

つーか試してくれよ。
これだけ御膳立てしたんだからさ。

ここまで見た
  • 790
  •  
  • 2014/09/13(土) 19:23:58.85
>>789

大体、答えが分かった。

つまりあなたは、wxFormBuilder に MyProject1MyFrame1 を生成させて、
this->Close();
を追加したんだ。


そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
this->Close();
を自分で書かなきゃならない。

それが、>>779 の意味だね?

だとすれば、this->Close(); の部分は、実践的には、もっと長くなるのだから、
物凄く面倒で、なおかつ危険が伴う作業になるね。

ここまで見た
  • 791
  •  
  • 2014/09/13(土) 19:27:26.32
>>790

>そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
>this->Close();
>を自分で書かなきゃならない。

ここの部分を補足すると、その時に追加したボタンやメニュー項目に対するハンドラだけ
でなく、既に存在していたボタンやメニュー項目に対する全てのハンドラの中身を手作業で
コピーする必要があるということになる。

ボタンやメニュー項目の個数をN とすると、O(N^2) の作業時間が必要になるね。

ここまで見た
  • 792
  •  
  • 2014/09/13(土) 19:44:06.05
>>790
> そいういうやり方だと、ボタンやメニュー項目を一つ増やす度に、手作業で、また、
> this->Close();
> を自分で書かなきゃならない。

そこらへんに少しコツがあってな。
自動生成された部分を一切変更しない限りにおいて、
後から機能追加して再度サブクラスを生成した時、以前書いた部分は削除されない。
つまり今回の例では「this->Close();」は消えずに残る。
逆に言えば「// TODO〜」コメントの削除や編集すら許されないという事なんだけどな。

これが守られなかった場合、同名の(空の)関数が別に生成される。
この場合は旧関数から新関数へのコピペおよび旧関数の削除の手間が生じるが、
いずれにせよ一度書いたものが消える事は無い。

ヘッダファイルにおいても同様であり、
//// end generated include と
/** Implementing MyFrame1 */ の間、それと
//// end generated class members 以降の行に書いた内容は削除されない。
安心して機能追加できる。
不安だったら再生成する前にバックアップ取っておけばいい。

問題があるとすれば、コードのインデントが全て消える事。
Eclipse等開発環境のコードフォーマッタで解決するが、3.4.0beta時点では
インデント維持されてた筈なんだ。なんで維持されなくなったんだ?
俺の見落しか仕様かバグか。

ここまで見た
  • 793
  •  
  • 2014/09/14(日) 06:35:44.14
なるほど、wxFormBuilderも新規出力(全書き換え)しかできないわけではないという
ことなの?

どうやるのかな?

ここまで見た
  • 794
  •  
  • 2014/09/14(日) 06:44:15.89
あと、EVENT TABLEが古いと言ってる人がいたけど、Connect()がそれに置き換わっただけ
だからね。使う側から目線では(抽象的な意味では)変わってない。配列で静的に持っているか、
関数で登録するかの違いに過ぎないから。

ここまで見た
  • 795
  •  
  • 2014/09/14(日) 07:18:40.80
以下によると、wxSmith には、TOP LEVEL RESOURCE を2つ以上作成する方法が見つからないらしい。
いったん、1つのTOP LEVEL WINDOW を作ると、全てがそのウィンドウの子供になってしまう。
POPUP MENU や、メインウィンドウに付随する1群のダイアログは、作るのが難しいらしい。
それに対して、wxFormBuilderは、2つ以上の TOP LEVEL RESOURCE を作ることが出来る、
と主張している。


http://forums.codeblocks.org/index.php?topic=15742.0

It's one of reasons why I have switched from wxSmith to wxFormBuilder.
I haven't found how can I create more than one "top level" resource in my XRC file using wxSmith.
Once I created a top level window, everything needed to be a child of this window.
Create a set of popup menus? Forget it. Create a set of dialogs along with your main window? Forget it.
wxFormBuilder allows more than one top level resource.
Moreover, wxFormBuilder can create only a XRC file - well, it creates a code, too,
and you can paste parts of the code in your own code.

I am curious what I have missed. I am a "XRC user", too.

ここまで見た
  • 796
  •  
  • 2014/09/14(日) 10:11:50.71
お前が返信に時間かかってるのは煽るための文言を探してくるためか?
これだけ御膳立てしてやっても自分では一切手を動かす気は無いんだから、
呆れを通り越して笑いすら出てくるわ。俺はお前の保護者じゃねえよ。
英文は読めるみたいだからソフトの使い方が分からない筈があるまいに。

>>793
こんな問いに答える気はもう無い。理由は上記の通りだ。
今まで以上に噛み砕いた説明は俺には出来ないし、
そもそも手を動かしていれば既に理解している筈の内容ばかりだからな。
F8とF6からクラス選んで名前付けてコード生成すら出来ん奴が本当にプログラム書けるのか?
無理しないでVSやMonoでC#あたり使ってればいいんじゃないか?
そっちの方がずっと楽だぞ。

>>794
それ書いたのは俺だが、利用上はそれだけの違いでは済まないという事も
英文読んだなら理解できてるはずだろ。煽るためのネタにはならんぞ。
柔軟性は高いに越した事はなかろうよ。
もちろんその機能が自分にとって役立つかどうかは別問題だ。

ここまで見た
  • 797
  •  
  • 2014/09/14(日) 12:57:54.21
>>796
誰も悪気がやってやってるわけじゃない。
あなたが勝手にそう取ってるだけだよ。

ここまで見た
  • 798
  •  
  • 2014/09/14(日) 19:26:47.68
>>791
それは難癖だよ
継承側で動的バインドという
他と同じ手法を取ればいいだけの話だから
手間はおんなじだよ

>>792
その癖やコツをつかむのに
試行錯誤したりソースを読み解く必要性があるのが辛いんだよね
正味な話不安で信用ならない
手動目視でDiffるか
PEGでも使って自前で書いたほうが楽

ここまで見た
  • 799
  •  
  • 2014/09/14(日) 19:52:29.25
>>798
前半意味不明です。

ここまで見た
  • 800
  •  
  • 2014/09/14(日) 20:11:08.81
>>799
> ここの部分を補足すると、その時に追加したボタンやメニュー項目に対するハンドラだけ
> でなく、既に存在していたボタンやメニュー項目に対する全てのハンドラの中身を手作業で
> コピーする必要があるということになる。

電卓とか参考になると思うよ

ここまで見た
  • 801
  •  
  • 2014/09/15(月) 08:45:18.98
>>800
ならないと思う。
全てのボタンを一気に wxFromBuilder で作ってからイベントハンドラの
コードを手作業で書けば問題は表面化しないから。

そうでなくて、実際のプログラミングでは、機能追加のたびにボタンを追加して行く
ような作業が必要となる。

その時に上書きされてしまうかどうかがポイント。

ここまで見た
  • 802
  •  
  • 2014/09/15(月) 10:58:47.94
xrcでFA

ここまで見た
  • 803
  •  
  • 2014/09/15(月) 19:07:00.41
だから「ソフトの様式さえ守っていれば」書いたコードが消去されるような事は無いと何度言えば分かってくれるんだ。
試してないのが丸判りだ。ほんっっっっっっとに口ばっかりだなお前は。
これで悪気が無いというんだから最悪だ。本当に本当に最悪だ。

そもそもwxFormBuilderで生成したイベント部に何十行も書くのか?
保守性考えたら、C++だったら別にクラスや関数作って、そっちに処理ブン投げて終わりじゃないか?

ここまで見た
  • 804
  •  
  • 2014/09/16(火) 00:01:13.35
>>803
全部自分で試さなきゃならないなら、人に聞く権利がなくなるじゃん。
試すのが時間がかかりすぎるから、誰かが試した結果が文書化されるん
だから。

ここまで見た
  • 805
  •  
  • 2014/09/16(火) 02:40:02.42
これは一緒に仕事できないタイプですわ

ここまで見た
  • 806
  •  
  • 2014/09/16(火) 02:41:50.55
自分はネット上に調べ物を書くときは自分が試した範囲のことしか書かないよ
妄想の実行結果で文句言ったりしないし、困難があれば自分で突破する

ここまで見た
  • 807
  •  
  • 2014/09/16(火) 09:52:32.15
「共助」という概念を知らないの?
「自助」しかしてはならないなら、掲示板の意味がほとんど無くなる。

ここまで見た
  • 808
  •  
  • 2014/09/16(火) 15:26:46.89
>>803
>そもそもwxFormBuilderで生成したイベント部に何十行も書くのか?
>保守性考えたら、C++だったら別にクラスや関数作って、そっちに処理ブン投げて終わりじゃないか?

これは駄目。

なぜなら、また、*.cpp と *.h に決まりきったコードを書く必要が出てくる
から。イベントハンドラ 1 つずつにこれを書く作業が大きなロスを
生む。

ここまで見た
  • 809
  •  
  • 2014/09/16(火) 22:49:04.68
>>804
共助?お前だけは言っちゃいかん言葉だ。
1から100まで他人に聞いてばっかじゃんかお前。
お前がスレの閲覧者に対して何か有益な事一つでも書いたか?
ぜ〜〜〜〜〜んぶ愚痴もしくは煽りじゃんか。

全部自分で試さなきゃいけないとか言ってるがよ。
そもそもお前、俺の言った事何一つ聞く気が無いだろ?
徹頭徹尾お前はコードが消える前提でしか話してない。
信じてるなら未だにコードが消えるなんて言ったりする筈が無いからな。
書かれた事を信じず、そのくせ試す気も無い奴が共に助け合う?笑わせんな。

あと、決まりきったコードを書く必要が出てきてはダメな理由がまるで分からん。
そもそも一度書いたら終わりなのに、なんでロスなんだ?
具体例をサンプルコードで挙げてくれないか。
共助とか抜かしてるんだから勿論やってくれるよな?

ここまで見た
  • 810
  •  
  • 2014/09/16(火) 22:56:48.49
>>809
もうほっとけよ。相手するだけ無駄だ。

ここまで見た
  • 811
  •  
  • 2014/09/16(火) 23:45:52.12
>>809
あんたが作ってるプログラムとは規模が違うからだよ。

ここまで見た
  • 812
  •  
  • 2014/09/16(火) 23:46:54.65
てか決まりきったコードを減らすためのテンプレート?
そのためのメタプログラミングでしょ

ここまで見た
  • 813
  •  
  • 2014/09/17(水) 00:02:45.14
>>812
はあ?

ここまで見た
  • 814
  •  
  • 2014/09/17(水) 00:51:45.07
>>809
中段、あんたの言っていることはある程度は分かるんだよ。
でも、wxSmith の方が遥かにドキュメントが充実している上に、
CodeBlocks に統合されており、元々の設計からしてwxFormBuilderの
ような勝手な新規上書き仕様にはなってない。

wxSmithではマージやアペンドは当たり前なんだよ。その上で、
POPUP MENU だけは、作り方が分かたなかったから詳しい人に
聞いてみたかったんだ。質問する側が、答える側の言っていることを
全部試すなんて期待すべきじゃないぞ。

ここまで見た
  • 815
  •  
  • 2014/09/17(水) 00:56:23.54
なんちゅうか、wxSmithは古いと勝手に決め付けて、wxFormBuilder
の方がいいという主張なんだから、どう良いかはあんたが説明すべき
でこっちに試せと言うのはお門違いなんだよ。

そもそもドキュメントが少なすぎる。試すしかないないなんて、
原始人レベルじゃないか。仕様は紙に書くのが基本だが、wxSmithの
場合は動画も多いからまだいいんだよ。wxFormBuilderなんて駄目
なんじゃないのか。進めている海外サイトもあるが、開発者本人が
書いているだけかも知れんから、信用すべきじゃない。

ここまで見た
  • 816
  •  
  • 2014/09/17(水) 20:01:28.47
wxFormBuilderがどう良いかはもう書いた。お前が理解しようとしてないだけだ。
あとはお前が試すだけなんだが、自分が知らない新しい技術を試す気が無い
臆病者には永久に理解する事は無理。だからもう何もやらなくていい。お前を諭す事は諦めた。

まだ「勝手な新規上書き」とか言ってるしな。しないって何度言わせるんだか。
なんで理解しようとしないんだ。正規のドキュメントじゃないからか。
同じ事を書いてる奴が俺以外にいないからか。
それとも2chの落書きは信用ならんと?だったらなぜここで質問なんかしたんだ。
wxSmithだろうが何だろうが2chの書き込みって時点で信用度は同じだろう。

なんのかんのグダグダ言っても、結局wxSmithに関する事以外は試す気が一切無いという事も良くわかった。
もうお前が俺を論破して俺が尻尾巻いて退散したって事でいいや。相手するのがバカらしくなった。
所詮お前はマニュアルがブ厚いだけで満足する好奇心の無い老害だって事もわかったし。
ついでに口だけプログラマで、ちょっとしたサンプルコードも書けない無能だって事もね。

「馬鹿には無理」
いい台詞だわ。今頃になってつくづく思うよ。

ここまで見た
  • 817
  •  
  • 2014/09/18(木) 06:03:45.56
自己紹介乙

ここまで見た
  • 818
  •  
  • 2014/09/18(木) 12:03:25.71
>>816
質問者に対して試さないから無能だなんて、なんて性格悪いの。

ここまで見た
  • 819
  •  
  • 2014/09/18(木) 12:08:26.46
だよな。ゆとり世代がメインストリームのご時世に
再質問する前に手を動かすなんて面倒なことしてくれるなんてかんがえるほうが愚か

ここまで見た
  • 820
  •  
  • 2014/09/18(木) 12:22:18.94
感情や思考を産み出しているのはあなた自身
怒るか怒らないかを決めるのもあなた自身

ここまで見た
  • 821
  •  
  • 2014/12/19(金) 20:18:18.31
mingw32でwxWidgets作ったら、それを使って作ったプログラムがwinspool.dllがないって怒られるんだよね。
ググったらlibwinspool.aのwinspool.dllをwinspool.drvにバイナリエディタで書き換えたら桶みたいなのがあって試したら動きやがんのな。
まあ、自分のパス通している所にwinspool.drvをwinspool.dll名義で置く方が安全かもしれんが。

ここまで見た
  • 822
  •  
  • 2014/12/19(金) 20:32:35.26
プログラミング未経験者も大歓迎

ここまで見た
  • 823
  •  
  • 2014/12/20(土) 10:21:06.56
>>821
今ならmsys2のpacman使えばwxWidgetsのバイナリがすぐ手に入る
自前ビルドはライブラリのデバッグするのでもないかぎり不要やで

ここまで見た
  • 824
  •  
  • 2014/12/20(土) 12:24:25.48
JaneCloneのひとかな

ここまで見た
  • 825
  •  
  • 2014/12/20(土) 12:43:19.97
正体ばらすのやめろや

砂時計アラームタイマー
フリック回転寿司
ここまで見た

★お気に入り追加

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