【GUI】wxWidgets(旧wxWindows) その3【サイザー】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/09/09(土) 00:06:30本家
http://www.wxwidgets.org/
wxWindows日本語プロジェクト
http://wxwindowsjp.sourceforge.jp/
Let's wxWidgets
http://dot-gray.s33.xrea.com/
(*)準備中(*)
http://www.geocities.co.jp/SiliconValley-Cupertino/8526/
wxWindowsで始めるC++ GUIプログラミング
http://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
http://namazu.org/~satoru/pub/uu-2004-08/
dW : Linux : wxWindowsの概要
http://www-6.ibm.com/jp/developerworks/linux/010413/j_l-wxwin.html
SunWorld Online:wxWindows――無名だが成熟したGUIツールキット
http://www.idg.co.jp/sw/back/200102/20010219_01_report.html
0487デフォルトの名無しさん
2007/11/01(木) 00:29:32思いつきだがそこはImageMagickに任せてしまうとか。
wxImage <-> ImageMagickのイメージ形式
の変換コストが問題になるほどだとあかんけど。
0488デフォルトの名無しさん
2007/11/01(木) 00:51:48パッと見ただけの実に適当な印象だが。
wxImageはRGB24bitのピクセルデータと、8bitのαチャンネルのデータを
別々に持ってるようだねえ。で、イメージの配列には当然のように
バイト単位でアクセスしている。
ネイティブな形式が例えばAGBRなら、さらにそれをいちいち変換して描画
するんだろうね。
いかにも遅そうだねえ。
0489486
2007/11/01(木) 01:21:15>488
レスありがとうございます。
>486
別プロセスで ImageMagick 起動ってことですよね。
たぶんそっちの方がコスト的には高いかと。
うーん。せめて StretchBlt でリサイズしつつメモリに転送とか
できたらいいのに・・・。
0490デフォルトの名無しさん
2007/11/01(木) 01:29:20ん? ライブラリリンクしちゃえば、という積もりだったんだけど。
っても今確認したらGPLかぁ > ImageMagick
0491デフォルトの名無しさん
2007/11/01(木) 08:04:20ポインタで直接処理した後wxBitmapに変換して使用するしかないかと。
画面がリサイズされたときなど必要に応じて最低限の変換で対応するか、
OpenGLあたりを使うほうがよさそう。
0492デフォルトの名無しさん
2007/11/01(木) 15:56:10>LGPLでは動的な(実行時)リンクに限り、GPL/LGPLに従わないソフトウェアでの利用も許容している。
あれ?
wxWigetsってLGPLだから、静的リンクした場合、ソースを公開しなきゃならないの?
0493デフォルトの名無しさん
2007/11/01(木) 16:49:000494デフォルトの名無しさん
2007/11/01(木) 22:11:221. LGPL にソース公開の義務は無い
2. wxWidget は LGPL の制限を緩める為の追加条項を加えたライセンスを採用している
3. 何か契約をする際は必ず原文に目を通した方が良い
0495486
2007/11/02(金) 01:02:56大変失礼しました。
ImageMagickのライブラリってあるんですね。勉強不足でしたorz
wxIMAGE_QUALITY_NORMALで写真の画像をリスケール
したところ、思ったよりも画像が崩れなかったので、
しばらくはコレを使おうと思います。
32x32とかのアイコンとかを拡大するとダメダメだけど・・・
0496デフォルトの名無しさん
2007/11/04(日) 14:03:59ボタンの配置について質問です。
ダイアログで「OK」ボタンと、「キャンセル」ボタンを横並びで表示したいのですが、
縦に並んでしまいます。
どうしたらよいのでしょうか?
0497デフォルトの名無しさん
2007/11/04(日) 15:11:340498デフォルトの名無しさん
2007/11/04(日) 22:22:30エスパー初心者がいってみよう
wxHORIZONTAL
0499デフォルトの名無しさん
2007/11/04(日) 22:50:39・・・ ・・ ・・ ・ ・・・
ディスプレイを縦にするといいと思うよ。
0500デフォルトの名無しさん
2007/11/05(月) 01:10:470501デフォルトの名無しさん
2007/11/06(火) 01:08:10サンプルを見てもよくわかりません。
ほかにわかりやすいサンプルはありませんか?
サンプル:console.cpp 3238行目
0502デフォルトの名無しさん
2007/11/06(火) 04:34:480503デフォルトの名無しさん
2007/11/09(金) 00:20:09GtkmmとwxWidgetsのどちらを使うか迷っています
既に両方使ったことのあるかたにアドバイスを
頂きたいのですが
0504デフォルトの名無しさん
2007/11/09(金) 00:54:22wxWidgets の方がアプリを使ってて気持ちいい
0505デフォルトの名無しさん
2007/11/09(金) 02:01:39これまで打ち込んだやつがヒストリーとして表示するように
したいんだけどこういうのはなんか用意されているでしょうか?
0506デフォルトの名無しさん
2007/11/09(金) 04:37:15すごく分かりやすい説明です
本当にありがとうございました
とりあえず両方やってみます
wxWidgetsで分からないときは
ここを頼りにしていますので
よろしくお願いします
0507デフォルトの名無しさん
2007/11/09(金) 05:54:31> wxWidgetsで分からないときは
なんたらoverview
リファレンス
本体ソースコード
サンプル
の順かなあ、俺が頼りにしたのは。
0508デフォルトの名無しさん
2007/11/14(水) 03:42:08wxBlog見たらver3.0でつきそうな感じだね。
0509デフォルトの名無しさん
2007/11/14(水) 12:03:091,ゴッドサイザー
2,アステサイザー
3,三ツ矢サイザー
4,グレンサイザー
0510デフォルトの名無しさん
2007/11/14(水) 13:59:57Unicodeがどうのこうのとあるんですが、Unicodeビルドしなくても
デフォルトでUnicodeビルド扱いになるということなんでしょうか?
0511デフォルトの名無しさん
2007/11/14(水) 23:46:59このページ見て設定してみたけどコンパイルできません。
wx/wx.h がNo such file or directoryとなりインクルードできないです。
どうしたらよいのでしょうか?
0512デフォルトの名無しさん
2007/11/14(水) 23:58:010513デフォルトの名無しさん
2007/11/15(木) 00:00:090514デフォルトの名無しさん
2007/11/15(木) 00:25:150515デフォルトの名無しさん
2007/11/15(木) 00:36:15C:\MinGW\includeにはなくて、
C:\msys\1.0\home\Owner\wxMSW-2.8.6\include
にあります。
C:\msys\1.0\home\Owner
にファイルを作りコンパイルしたところできませんでした。
0516デフォルトの名無しさん
2007/11/15(木) 00:48:08`wx-config --cxx` -o hoge.exe hoge.cpp `wx-config --cflags --libs`
みたいにしてコンパイルしれ
0517デフォルトの名無しさん
2007/11/15(木) 01:01:32今までやってた
$g++ -c hello.cpp 'wx-config --cppflags'
ではできないみたいですね。
0518デフォルトの名無しさん
2007/11/15(木) 01:52:510519デフォルトの名無しさん
2007/11/15(木) 03:49:16・今までANSIとUnicodeの二つのビルドがあったのが、一つになる。
・wx内部では全部Unicodeで処理するが、APIはANSIとUnicode両方が用意される。
・ANSIのAPIは逐一Unicodeにエンコードして処理する。
ってところだと思う。
0520デフォルトの名無しさん
2007/11/15(木) 05:35:38それのプログラム見たらわかるけど効率悪い
自分で組んだ方がいいよ
0521デフォルトの名無しさん
2007/11/15(木) 05:37:35wxImageにラップするようだけど
それを待ってもいいかも
0522デフォルトの名無しさん
2007/11/23(金) 00:52:43**********************
* *
* A *
* *
* *
**********************
* B * C *
**********************
以上のようなレイアウトで、
・縦幅が変化した場合はAのみ
・横幅が変化した場合はAとC
それぞれ動かしたいのですが、
いったいどうやってサイザーを設定すればいいのでしょうか?
よろしくお願いします。
0523デフォルトの名無しさん
2007/11/23(金) 01:32:23試してないけどこんなんでどう?
wxSizer *root = new wxBoxSizer(wxVERTICAL);
root->Add(A, 1, wxEXPAND);
wxSizer *sub = new wxBoxSizer(wxHORIZONTAL);
sub->Add(B, 0, 0);
sub->Add(C, 1, 0);
root->Add(sub, 0, wxEXPAND);
SetSizerAndFit(root);
BoxSizerの指定方向に対しては、Add()のproportionを1以上にするとサイズ変更される。
もう一つの方向に対しては、wxEXPAND指定すれば、領域を埋めるようにサイズ変更される。
0524デフォルトの名無しさん
2007/11/23(金) 02:02:10それでできました!
CにEXPANDを指定したら、縦に広がったりしてかなり困っていました。
サイザーってそういうふうになっているんですね。
どうもありがとうございます。
0525デフォルトの名無しさん
2007/12/01(土) 22:18:22> font.GetPointSize();
だと値が表示されている高さよりも明らかに小さくなります。
正確な値を得るにはどうすればいいのでしょうか?
よろしくお願いします。
0526デフォルトの名無しさん
2007/12/01(土) 23:15:350527デフォルトの名無しさん
2007/12/02(日) 00:51:21それなら、ポイントをピクセルに直すにはいったいどうすればいいのでしょうか?
解像度とか関係ありそうなのですが、よく分からないのです。
0528デフォルトの名無しさん
2007/12/02(日) 01:38:57wxDC::GetCharHeight()
がそれっぽいですがベースラインより下の部分も含んでるのかどうかはわかりません
0529デフォルトの名無しさん
2007/12/02(日) 20:09:11それを参考にして書いていたら、wxWindowにも
同じ名前のドンピシャなメソッドがあることが分かりました。
ありがとうございました。
0530デフォルトの名無しさん
2007/12/05(水) 20:34:52切り替えは出来ないものなのでしょうか。サンプルのsplitterに、statbarからの表示/非表示
切り替えコードを追加してみたのですが、初回の非表示(失敗)後に、分割ウィンドウの
サイズが変更不能となってしまいます。
0531530
2007/12/05(水) 21:18:50wxStatusBar* statbar = GetStatusBar();
:
statbar->Hide();
//SetStatusBar(NULL); // <- 親フレームと分割ウィンドウの連動が解除されてしまうのでコメントアウト
SendSizeEvent(); // 非表示部が即時更新されないので追加
:
0532デフォルトの名無しさん
2007/12/13(木) 16:52:55変数ウォッチとは、プログラムのデバッグ時にint型やクラス型で定義された変数の
名前や中身や型を表示するものです。
変数の名前や型だけを表示するならばwxListCtrlでもwxDataViewCtrlでも何を使ってもいいのですが、
メンバをもつ変数を表示させることを考えると、
どうしてもオブジェクトをツリー形式で表示させたくなります。
また、デバッグ中にウォッチする変数を新たに追加したくなった場合にも
簡単に追加できるものがいいのです。
つまるところ、
・できれば名前や型などの欄が作れる
・ツリー形式で表示できる
・新規のアイテムが簡単に追加できる
これらのことができるコントロールを探しています。
個別の条件を満たすものは見つかるのですが、そのすべてを満たすものが見つからず苦心しています。
(ちなみに、VS2005ではwxDataViewCtrl(wxGrid)のアイテム中にwxTreeCtrlのようなものを表示しています)
条件に合うコントロールがあれば教えていただきたいのです。
よろしくお願いします。
0533デフォルトの名無しさん
2007/12/14(金) 18:55:29http://homepage2.nifty.com/bkclass/doc_wxcode.html
0534デフォルトの名無しさん
2007/12/15(土) 01:40:55wxCoreというのは初めて知りました。
サンプルも動かしてみたのですが、これは素晴らしいですね。
どうもありがとうございました。
0535デフォルトの名無しさん
2007/12/16(日) 20:16:12ウィンドウのクライアント領域のサイズを得ることはできますか?
0536デフォルトの名無しさん
2007/12/16(日) 20:20:35ウィンドウのクライアント領域のサイズ
0537デフォルトの名無しさん
2007/12/16(日) 21:21:45すいません。説明が足りませんでした。
クライアント領域からスクロールバーの領域を除くためには
1,スクロールバーが表示されているかを検出する
2,表示されていたら、そのスクロールバーのサイズ分だけクライアント領域から除く
という主順を踏む必要があります。ところが自分にはこの二つともやり方が分かりません。
例えば、スクロールーバーはコントロールの内容によって表示されたり消えたりしますよね。
HasScrollbarメソッドはどうもスクロールバーの非表示を検出してくれないようで、
ウィンドウスタイルによって値が決まってしまいます。
つまり、スクロールバーが表示されているかを正しく知る方法が自分には分かりません。
また、普通のウィンドウクラスにはスクロールバーのサイズを得るメソッドが無い
(多分どこかにはあると思うのですが自分は知らない)
のでスクロールバーのサイズを得ることもできません。
0538デフォルトの名無しさん
2007/12/16(日) 22:22:35void GetViewStart(int* x, int* y) const
Get the position at which the visible portion of the window starts.
Parameters
x Receives the first visible x position in scroll units.
y Receives the first visible y position in scroll units.
Remarks
If either of the scrollbars is not at the home position,
x and/or y will be greater than zero.
Combined with wxWindow::GetClientSize,
the application can use this function to efficiently redraw only the visible portion of the window.
The positions are in logical scroll units,
not pixels, so to convert to pixels you will have to multiply by the number of pixels per scroll increment.
0539デフォルトの名無しさん
2007/12/16(日) 22:57:22またまたすいません。
対象としているコントロールにはwxTextCtrlやwxTreeCtrlなどの
wxScrolledWindowを継承しないものも含まれています。
0540デフォルトの名無しさん
2007/12/16(日) 23:22:23さすがにエスパーはいないぜ
自分で英語のリファレンス読めよ糞
0541デフォルトの名無しさん
2007/12/17(月) 17:40:00コントロールのリファレンスを読みたいのですが、教えて頂けないでしょうか?
0542541
2007/12/17(月) 17:57:54これがコントロールリファレンスですか。
>Members
ってのがメソッドで、
>Derived from
というのが派生元クラスでしょうか?
イベントも理解できれば完璧ですが、wx-Devがイベントハンドラ作ってくれるから、理解しなくても良いかなぁ?
0543541
2007/12/17(月) 18:33:28でも、WxButton::Enable(bool)が候補に出ないなぁ。コンパイルはトオタケド
0544デフォルトの名無しさん
2007/12/17(月) 18:42:19virtual bool Enable(bool enable = true)
0545デフォルトの名無しさん
2007/12/28(金) 10:15:540546545
2007/12/28(金) 10:18:150547545
2007/12/28(金) 11:18:39仕様ですか?
0548デフォルトの名無しさん
2007/12/28(金) 12:34:30EVT_WINDOW_CREATE
0549デフォルトの名無しさん
2008/01/05(土) 18:48:32wxのサンプルについてくるのでも必ず
(a.out:32364): GLib-GObject-WARNING **: gsignal.c:1741: instance `0x908820' has no handler with id `673'
(a.out:32364): GLib-GObject-WARNING **: gsignal.c:1741: instance `0x8b4d30' has no handler with id `531'
(a.out:32364): GLib-GObject-WARNING **: gsignal.c:1741: instance `0x8cfa90' has no handler with id `604'
(a.out:32364): GLib-GObject-WARNING **: gsignal.c:1741: instance `0x8b4850' has no handler with id `465'
(a.out:32364): GLib-GObject-WARNING **: gsignal.c:1741: instance `0x5f4df0' has no handler with id `326'
(a.out:32364): GLib-GObject-WARNING **: gsignal.c:1741: instance `0x5f4840' has no handler with id `48'
zsh: segmentation fault ./a.out
みたいな感じで落ちます。
Glib-GObject-WARNINGの部分はInput Methodがuimだかららしいのですが。
0550デフォルトの名無しさん
2008/01/07(月) 02:47:580551549
2008/01/07(月) 03:37:44ありがとうございます。
環境を書き忘れてました、すいません。
当方64bitのGentooでしたのですが、試しに32bitのDebianで試してみたところ
segfaultで落ちることは無いようです。Glib-Object-WARNINGはuimを切ると出なくなりました。
wxGTKのバージョンは2.8.7.1です。
もしかしたら私の環境だけなのかと思い書かせて頂いた次第です。
0552デフォルトの名無しさん
2008/01/07(月) 04:20:210553549
2008/01/08(火) 00:14:53どうやらwxGTKのバグのようでした。どうもありがとうございました。
0554デフォルトの名無しさん
2008/01/10(木) 00:53:45でセルにプルダウンなメニューを出しているのですが、動作がおかしいのです。
Windowsでは期待道理に動くのですが、Linuxだと候補から選択してもセルに
値が入りません。
ttp://d.hatena.ne.jp/Megumi221/20071123
の方も同様にいわれているのですが、どなたか解決された方いらっしゃらない
でしょうか?
Linuxのgtkとかのライブラリ依存なのでしょうか・・・
0555554
2008/01/10(木) 23:50:380556デフォルトの名無しさん
2008/01/11(金) 03:40:29ってそれはえなりだよ
0557デフォルトの名無しさん
2008/01/12(土) 19:53:060558デフォルトの名無しさん
2008/01/20(日) 23:45:50どうしても解決しないので質問させてください。
環境はWindow XP Home MinGW です。
Eclipse CDT からMinGW を使って普通のcppファイルのコンパイル自体はできる状況です。
自分もここ
http://0xcc.net/pub/uu-2004-08/
を見て色々設定したのですが、wxGladeを使って生成したhello.cppをコンパイルしようとするとエラーが出ます。
このページではwxWigdetsのバージョンは2.5.2が扱われていますが、なぜか自分の環境で2.5.2をインストールしようとすると./configure --disable-shared --disable-threads →make の時点でエラーが出るので
ver2.8.7を./configure --disable-shared --disable-threads →make して、make install もしました。
この状態でwxGladeで生成したhello.cppを上記ページで書かれているように
g++ -c hello.cpp `wx-config --cppflags`
すると、
g++: 'wx-config: No such file or directory
cc1plus.exe: error: unrecognize command line option "-fcppflags'"
というエラーが出てしまいます。
`wx-config --cxx` -o hoge.exe hoge.cpp `wx-config --cflags --libs`
とすると、
''wx-config' は内部コマンド外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されていません。
というエラーになります。。
どうすればよいのでしょうか??どなたかご教示頂けると幸いです。
0559デフォルトの名無しさん
2008/01/21(月) 03:02:40やってもダメでしょうよ。
0560デフォルトの名無しさん
2008/01/21(月) 11:12:14MSYSを導入して、rxvt上で実行しろ
0561デフォルトの名無しさん
2008/01/21(月) 11:16:12http://0xcc.net/pub/uu-2004-08/
ここの、Windowsにインストールする場合の説明のところを見てやったのですが・・
あと558の
wx-config --cxx` -o hoge.exe hoge.cpp `wx-config --cflags --libs`
wx-config --cxx` -o hello.exe hello.cpp `wx-config --cflags --libs`
の間違いでした。
0562デフォルトの名無しさん
2008/01/21(月) 11:33:27回答ありがとうございます。MSYSは入ってます。
MSYSを導入して、rxvt上で実行 というのは、C:\MSYS\1.0\bin\rxvt.exe を立ち上げて
そこからg++ 〜 でコンパイルしろってことでいいんでしょうか。
家帰ったら試してみます。ありがとうございます。
0563デフォルトの名無しさん
2008/01/21(月) 12:20:12$ wx-config --cflags
とでも打ってみるんだな
どんな効果がでるか一発で分かる
0564デフォルトの名無しさん
2008/01/21(月) 13:05:17操作可能なプログラムまたはバッチファイルとして認識されていません。
というエラーになります。。
0565デフォルトの名無しさん
2008/01/21(月) 13:17:20windows のコマンドラインじゃなくて
ユニックス系の shell でやらなきゃ ...
0566558
2008/01/21(月) 14:00:43564は自分じゃないですよ。
多分あまりにも基本的な部分で間違ってるので他の方に茶化されたのだと・・
でも
> wxWidgets はユニックス系なので、
> windows のコマンドラインじゃなくて
> ユニックス系の shell でやらなきゃ ...
ここらへんわかってなかったのでご指摘いただけてラッキーでした。
ありがとうございます。
シェルの勉強等まだ手をつけておらずほぼ全く分からないもので・・
初心者質問ばかりしてすいません >564さん
>563さん
ありがとうございます。帰ったら試してみます。
0567デフォルトの名無しさん
2008/01/22(火) 00:24:02Windowsでやるよりはるかに簡単だから。ネットの情報もほとんどUNIX系だし。
一旦それでやってればWindowsでもすぐできるようになると思う。
UNIX系の情報を見ながらWindowsで一発でやるには両方の知識が必要。
0568デフォルトの名無しさん
2008/01/22(火) 02:55:34xrcの存在意義を無視してるのは分かるのですが、
ソースは簡潔&実行時にはファイル一つ、にどうしてもしたくて..
0569デフォルトの名無しさん
2008/01/22(火) 05:10:430570デフォルトの名無しさん
2008/01/22(火) 05:32:32xrcのデータを実行ファイルに持たせることなら普通に出来る。ドキュメント読め。
0571デフォルトの名無しさん
2008/01/22(火) 17:11:00ご指摘されたとおりrxvt上からg++ 〜でやってみたのですが
wx/wx.h No such file or directory
などその他たくさんエラーが出てしまいました。
wx-config --cxx` -o hello.exe hello.cpp `wx-config --cflags --libs`
では wx-config-cxx commnad not found と言われてしまいました。
>567さん
Linuxでやる方が簡単なんですか。。
一度VMwareにUbuntu入れてやろうと思ったのですが重くてやめてしまってました。
Linuxの方が簡単なのであればそっちでやってみることにします。
ありがとうございました。
0572デフォルトの名無しさん
2008/01/22(火) 17:22:090573デフォルトの名無しさん
2008/01/22(火) 18:38:29xrcでフォームの位置やサイズをアプリケーション終了時に保存することはできますか?
0574デフォルトの名無しさん
2008/01/22(火) 23:05:56出来ました。ありがとうございます
0575デフォルトの名無しさん
2008/01/23(水) 00:04:51もうちっとコマンドラインとか、パスとか、そういうことを勉強したほうがいいと思うな ...
0576デフォルトの名無しさん
2008/01/23(水) 01:05:42そういえばマイナー同士の組み合わせの割には、wxPythonの日本語情報って
ググると意外に出てくるね。
0577デフォルトの名無しさん
2008/01/23(水) 02:08:03はじめたばかりの君は恵まれている
昔は見つからなかった
0578デフォルトの名無しさん
2008/01/23(水) 02:15:24猛者たちがあらわれたってことか。感謝感謝。
0579デフォルトの名無しさん
2008/01/23(水) 05:26:510580デフォルトの名無しさん
2008/01/23(水) 08:53:58wxに限らずPyGTKやらPyQtやらで作られたアプリが増殖中
0581デフォルトの名無しさん
2008/01/23(水) 09:11:20自信たっぷりの間違いがいくつかあるので注意
ttp://www.harukaze.net/~haruka/wxpython/
0582デフォルトの名無しさん
2008/01/29(火) 18:06:45C++ Builder/VCL だと、
>void __fastcall TForm1::ApplicationEvents1Exception(TObject *Sender, Exception *E)
みたいな感じで書くんですが。
0583デフォルトの名無しさん
2008/01/29(火) 19:13:420584デフォルトの名無しさん
2008/01/29(火) 19:22:52アプリの一箇所、一括でcatchしたいだけですが、どう書けば良いでしょう?
0585デフォルトの名無しさん
2008/01/29(火) 23:17:40{
try {
// main routine
}
catch(...) {
// error handling
}
}
0586デフォルトの名無しさん
2008/01/29(火) 23:40:34とするとwxApp::OnFatalExceptionとかがそうなのかなぁ。
ttp://wxwindowsjp.sourceforge.jp/docs/html/wx/wx30.htm#wxapponfatalexception
0587デフォルトの名無しさん
2008/01/30(水) 01:38:35wxApp::OnUnhandledExceptionのドキュメント見ると、
OnRunをオーバーライドしてそこでキャッチしろって書いてるよ。
int MyApp::OnRun()
{
try{
return wxApp::OnRun();
}
catch(std::exception &e){
...
}
}
■ このスレッドは過去ログ倉庫に格納されています