【GUI】wxWidgets(旧wxWindows) その5【サイザー】

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/
2010/12/03(金) 00:13:26
>>125
wxFONTFLAG_STRIKETHROUGHを指定したフォントを適用してやるとかで
できるんじゃない?
2010/12/04(土) 15:45:14
ありがとうございます。

font = wx.FFont(8, wx.DEFAULT, wx.FONTFLAG_STRIKETHROUGH)
self.target.SetFont(font)

FONTFLAG_STRIKETHROUGHを指定してみたのですが、打ち消し線が表示されません。
2010/12/05(日) 00:26:59
wxWidgets2.8.xに実装されているウィジェットの表示サンプル一覧とかないですかね?
サンプルを実行してみないとどのように表示されるのか判らないのはかなり不便・・・('A`)
129デフォルトの名無しさん
垢版 |
2010/12/05(日) 02:32:55
demosも一緒にインストール汁
2010/12/06(月) 23:39:23
>>127
ttp://trac.wxwidgets.org/ticket/9907
打ち消し線が有効化されるパッチ。
ただし2.9。
2010/12/25(土) 00:41:50
>>130
遅れましたが、ありがとうございます。
wxWidgets用のパッチのようなのですが、
wxPythonに適用させる方法がわかりません・・・
2011/01/01(土) 17:37:18
Androidに対応してくれないかなぁ・・・
2011/01/02(日) 03:08:38
AndroidやiPhoneもそうだけど、Mac対応(wxCocoa)もしっかりして欲しい。
このままじゃ何時まで経っても64bit化出来ない。
やっぱり企業の後ろ盾がないプロジェクトはきついかもね。
2011/01/15(土) 01:11:15
Qtは人気あるのに、こっちは盛り上がらないね。
2011/01/15(土) 01:25:48
QtはLGPLがヤダ
2011/01/15(土) 01:32:35
>>134
枯れてるからね
2011/01/15(土) 14:18:26
ほとんど同じ時期じゃね?
wx Initial release 1992
Qt Initial release 1992; 19 years ago
wxの敗因は、やっぱ製品として売り出してないからじゃね?
2011/01/15(土) 20:08:32
Android => Java, Google
gtk,Mono => Suse, Microsoft
Qt => Nokia, Google, Intel
wxwidget => ???
2011/01/15(土) 20:12:46
何の矢印だよ、それ。
2011/01/18(火) 00:04:15
wxRubyノート - ListCtrl を使ってサムネイル一覧を表示してみる - Alone Like a Rhinoceros Horn
ttp://d.hatena.ne.jp/h1mesuke/20100427/p1
のコードを動かしたいのですが日本語パスが使える状態で動かせません

Ruby 1.8.7+wxRuby 2.0.1
 動作するけど日本語を含むパスが認識しない
 (Ruby 1.8.xがUTF-8のパスを処理出来ないためっぽい
 S-JISだと今度はwxRubyがパスを認識出来ない)

Ruby 1.9.2+wxRuby 2.0.1
Ruby 1.9.1+wxRuby 2.0.1(mingw32-ruby-1.9.1-wxruby-2.0.1-setup.exe)
Ruby 1.9.1+wxRuby 2.0.0(mingw32-ruby-1.9.1-wxruby-2.0.0-setup.exe)
 RubyはUTF-8のパスを処理出来るけど
 >@thumb_list.clear_all
 のところで固まる

日本語パスが使える状態で動作させる方法があったら教えてください
よろしくお願いします
141デフォルトの名無しさん
垢版 |
2011/01/18(火) 06:48:23
つ ttp://codepad.org/SaG84FKe
142140
垢版 |
2011/01/23(日) 01:33:16
レスありがとう。ってPython!?Σ(゚Д゚)
わざわざ書き直してくれたのに申し訳ないけどRubyでコーディングしたいので・・・

とりあえずいじり回していたら思いついた案
1.Ruby 1.8系を使用。wxImage::load_streamを使う
  ファイルの自動判別が出来ない
2.Ruby 1.8系を使用。Rubyのファイルパスを扱うメソッドをUTF-8に対応するように再定義
  数が多くコーディング量が多い。デバッグも大変
3.RubyでwxPythonを使う
  まだ実験していない。動いたとしても関連ライブラリのサイズがでかくなりそう?
どれもイマイチだ(´・ω・`)
2011/01/23(日) 03:01:42
Ruby知らんけど、単に文字コード変換するんじゃダメなの?
2011/01/23(日) 17:59:40
コントロールに画像使うとリソース食うから
サムネにはお勧めできない
2011/01/23(日) 19:23:43
GUIやるならPythonの方が良いと思うけどなぁ。
Windowsと日本語はもちろんだけど、>>140のBlog見てるとスレッド周りにも
問題あるみたいだし。
2011/01/23(日) 20:59:01
>サムネイルを作成する間ウィンドウがブロックしないよう、サムネイルの作成は別スレッドで行っている。
>(ただし、サンプルということで、排他制御は一切やっていない)
>
>イベントループのあるメインスレッドからのスレッド切り替えが円滑に行われるよう、
>メインスレッドではタイマーを使って定期的に Thread.pass している。
>
> Wx::Timer.every(100) do
> Thread.pass
> end
>
>これが必要になる理由については次のエントリでやる予定。

謎のコード
147141
垢版 |
2011/01/23(日) 21:11:49
>>142
べつに謝らんでもええよ
漏れは困ってへんから
2011/01/23(日) 21:38:27
>>146
ttp://d.hatena.ne.jp/h1mesuke/20100508/p1
ここのコメ欄の方が怖いぞ。
2011/01/24(月) 05:23:51
Ruby使ってないから気にしない
2011/01/27(木) 23:54:02
wxWidgetsでアニメ(not 動画ファイル。MNG or 連番PNGを想定)を表示したいのですが
単に表示されている画像をインターバルで書き換えていく方法だとフリッカーが出てしまいます
再描画と画像の書き換えの同期が取れていないためだと思いますが同期させる方法が判りません
何か良い方法があったら教えてください。よろしくお願いします
2011/01/28(金) 01:18:19
ソース貼れ
2011/01/28(金) 23:04:25
>>150
wxBufferedPaintDC使え。
153150
垢版 |
2011/01/30(日) 00:53:07
レスthx

>>152
なるほどそう言うのがあるのか。試してみます
2011/01/30(日) 16:14:40
2.9.1が出てから音沙汰無いな
155150
垢版 |
2011/01/31(月) 00:06:45
>>152
フリッカーを無くせました。ありがとうございました
2011/02/05(土) 22:36:59
>>154
ttp://wx.ibaku.net/changelog/
連日どんどん更新されてるけど音沙汰ない?
2011/02/11(金) 06:24:01
前スレがやっと埋まったぽい。埋めた人お疲れさま。
2011/02/11(金) 23:54:18
つうか次スレ立てるの早過ぎだろ
2011/02/13(日) 21:55:32
このライブラリタダ?
2011/02/18(金) 08:33:59
EVT_LEFT_DCLICK で bind して処理しようとすると
EVT_LEFT_UP EVT_LEFT_DCLICK が同時に来るみたいなのですが
EVT_LEFT_DCLICK だけ受け取るにはどうすれば良いでしょうか?
2011/02/18(金) 20:45:41
>>160
wxMouseEventのLeftDClickで判別すればいいんじゃないの?
2011/02/18(金) 21:35:20
GoogleIME使ってるんだが、TextCtrlで未変換文字列とか変換候補とかが表示されないのは仕様か?
MSIMEならちゃんと表示された
2011/02/18(金) 22:05:32
>>162
ありがとうございます
試してみましたが
結局 EVT_LEFT_DCLICK に bind された handler 内では LeftDClick なのですが
同時に EVT_LEFT_UP に bind された handler も呼ばれてしまっていて
そっちでは LeftDClick じゃないとみなされるので区別出来ないんです ><
164デフォルトの名無しさん
垢版 |
2011/02/27(日) 19:42:45.69
wxApp の OnInit で wxFrame *frame = new wxFrame(hogehoge);
としたとき wxFrame を delete しないようですが
勝手に GC してくれるんでしょうか?
SetTopWindow(frame);
を実行したときとしないときでは違いますか?
2011/02/27(日) 20:07:52.06
メモリ以外の資源の解放をGC任せにする男の人って
2011/02/28(月) 14:53:53.44
>>164
wxWidgetsでは自分で解放すると返って二重解放になる。
ttp://www.wxwidgets.org/docs/faqcmn.htm
FAQに書いてあるから今後はよく読もうな。

2011/03/04(金) 16:28:05.88
主にwindowsで使っていますがlinuxでも同じソースで動くようにしたいです
wxStringで与えられたあるパス名がフルパスか相対パスかをwxWidgetsのクラス
(例えばwxFileName等)を使って判断出来ますか?
2011/03/04(金) 20:23:10.51
>>167

wxFileNameにIsAbsoluteというのがあるけども。
それすら調べられないようだとwxに限らずプログラミングは厳しいと思う。
2011/03/04(金) 20:25:20.16
ポインタ置いときますね。皆さん先刻ご存知かもしれませんが。

wxWidgets(wxstd.moの日本語版, ja.po)をお使いの皆様へ
ttp://suzumizaki.blog6.fc2.com/blog-entry-207.html
2011/03/04(金) 20:34:43.27
>>164
こっちも読んでおくといいよ。
二重開放以外にもdeleteがまずい理由があるようだから。
ttp://docs.wxwidgets.org/trunk/overview_windowdeletion.html
2011/03/04(金) 21:31:47.32
>>168
出来ました!!
ありがとうございました!!!
2011/03/07(月) 03:32:17.98
wxListCtrl の
SetItem - GetItemText とか
SetItemText - GetItem とか
なんか変な対応してるみたいなんですけど
こんなもんなんですか?
他にも IsIconized とか IsShown とか
ドキュメント通りじゃなくて
めちゃくちゃな感じがするんですが
設計者ってパラノイア?
2011/03/07(月) 04:30:33.22
馬鹿には無理
つ ttp://wiki.wxwidgets.org/WxListCtrl
Get the String Contents of a "cell" in a LC_REPORT wxListCtrl
2011/03/07(月) 07:16:25.58
>>173
出来ました!!
ありがとうございました!!!
2011/03/07(月) 11:00:32.39
質問です
wxWidgetsにはMD5やSHAを計算してくれる関数はありますか?
2011/03/07(月) 11:32:42.63
つttp://wxwidgets-hash-md5.fyxm.net/
2011/03/07(月) 22:35:46.50
>>175
176じゃないけど、MD5単品ならこういうのとか。
ttp://www.koders.com/cpp/fid80078010DEFC2265E917FE6436718F0AE038CBE6.aspx
2011/03/08(火) 09:26:30.33
>>178
ありがとうございます
とりあえず別のMD5ライブラリが見つかったのでそちらで間に合わせたのですが
ライセンスの問題とか考えると教えて頂いたもので置き換えた方が良いかも知れません
余力があったら後でご報告します
2011/03/09(水) 04:31:11.46
wxHTTP::GetResponse が 200 とか 403 とかじゃなくて 0 を返すんですけどバグですか?
2011/03/09(水) 04:46:40.12
つ ttp://wiki.wxwidgets.org/WxHTTP
2011/03/09(水) 05:29:32.87
>>180
出来ました!!
ありがとうございました!!!
2011/03/09(水) 17:04:06.53
文字コードの変換というか
変換出来ない文字が含まれているかどうかのチェック方法について質問です。

UTF8 の文字列を SJIS に変換しようとしています。

static wxString wxString::FromUTF8(const char *s);
の注意書きに、
Note that this method assumes that s is a valid UTF-8 sequence
and doesn't do any validation in release builds,
it's validity is only checked in debug builds.
というのがありまして、
実際に HTTP 経由で取得したデータ (UTF8 であることは確認済み) に
「〜」の上下反対の文字 (SJIS に変換出来ないコード) などが入っていると、
wxString utf8_data;
wxStringOutputStream ostream(&utf8_data);
httpStream->Read(ostream);
wxString sjis_data = wxString::FromUTF8(utf8_data.c_str());
なコードで変換しようとすると
sjis_data の中身が空っぽになってしまいます。
リリースビルドなので無視された結果だと思いますが、
wxWidgets 自身に事前にチェックするための関数などはありますか?

utf8_data には確かに UTF8 のデータが入っています。
問題を起こす文字が含まれていないときは正常に動作するようです。
OS は Windows で wxWidgets は ANSI 版のを使っています。
2011/03/09(水) 17:16:21.87
むしろUTF-8のまま扱うかUNICODEにしてしまった方が良いのでは?
2011/03/09(水) 20:02:39.82
>>182
wxStringOperations::IsValidUtf8String
2011/03/10(木) 08:17:32.00
>>184
ありがとうございます。
今レス見たばかりなのでまだ試していませんが、
http://docs.wxwidgets.org/trunk/annotated.html
を見ても wxStringOperations は見当たらず
ネームスペースかとも思うのですが、
こういったものはどうやって見つければ良いものですか?
2011/03/10(木) 08:25:43.01
>>182
wxString::FromUTF8Unchecked
2011/03/10(木) 08:27:16.48
>>185
http://trac.wxwidgets.org/wiki/DebugRelease
2011/03/10(木) 08:34:44.59
>>186
ありがとうございます。
しかしそれは Valid じゃない UTF8 データが渡されたときの
動作は undefined だと書かれていますね。
結局事前に調べないといけないことにかわりないようです。

>>187
ありがとうございます。
中身を読んでも良く判りませんでした。
どういう意味でしょうか?
2011/03/10(木) 08:38:29.58
ん?
「〜」301C(E3809C)
はValidじゃないのか?
2011/03/10(木) 09:19:31.75
問題なのはUTF-8として正しいかどうかじゃなくて
cp932に変換出来るかどうかってことなんだよな
そうなるとスレ違いかもな
191デフォルトの名無しさん
垢版 |
2011/03/10(木) 13:58:57.41
wxWidgetsって、けっこうS-JISの処理が弱いので、そこの部分だけはネイティブの処理にしたほうがいいかも
俺もアプリ作った事あるけど、S-JISに変換する部分だけはWideCharToMultiByte関数を呼ぶようにしたよ
2011/03/10(木) 16:16:13.99
>>184
残念ながら使えませんでした。
2011/03/10(木) 16:24:05.27
>>192
wxUSE_UNICODE_UTF8 を定義してないと使えないよ
つ ttp://docs.wxwidgets.org/trunk/overview_string.html
2011/03/10(木) 22:06:44.16
みなさん色々とありがとうございます。
wxString sjis_data = wxString::FromUTF8(utf8_data.c_str());
のところで例外出して死ぬパターンと sjis_data が空になるパターン
それからちゃんと成功するパターンとがありました。
結局アクセスしていたサイトに広告が入っていて、
時間帯によって内容が変わるようなのですが、
どうも本体は UTF8 なのに広告部分だけ SJIS とか、
お粗末なサイトだったのが混乱した原因の一つでした。
2011/04/19(火) 00:00:08.70
3.0マダー(AA略)
2011/05/25(水) 00:30:08.01
サイザーage
2011/07/02(土) 23:25:00.75
wxWidgetsとWinPcapをあわせて使おうとしてハマってたのが解決したのでカキコ

- winpcapのpcap.hはwxWidgetsのヘッダファイルのあとにincludeする必要がある
- pcap.h内部でwinsock2.hを呼んでいる
- winsock2.hはwindows.hの前にincludeする必要がある
- wxWidgetsのヘッダは、物によっては内部でwindows.hを呼んでいる

というデッドロック

#include <winsock2.h>
#include <wx/msw/winundef.h>
#include <wx/wx.h>
#include <pcap.h>

こんな感じでwinsock2.h呼んだあとにwx/msw/winundef.hを呼んでやれば解決する
198デフォルトの名無しさん
垢版 |
2011/07/16(土) 23:02:41.64
GUI の配置は XML で定義出来るのが一番良いなあ
2011/07/17(日) 01:18:11.68
それ何てXUL
2011/07/17(日) 22:48:55.64
wxだってXRCがあるじゃまいか。
2011/07/17(日) 23:28:11.01
誰も無いとは言ってないぞ
2011/07/17(日) 23:40:23.13
後出しww
2011/07/17(日) 23:43:54.73
ネタにマジレスww
2011/07/18(月) 05:50:22.06
なんのこっちゃ。
205デフォルトの名無しさん
垢版 |
2011/07/28(木) 23:53:32.75
リストボックスのアイテムとして
ボタンやテキストボックスを表示できる?
2011/07/29(金) 04:32:53.10
>>205
wxListBoxそのままでは無理。
テキストボックスだけでいいならwxEditableListBox使った方が早い。
それ以外でちょっとだけコントロールを付け足したいだけなら、
wxListBox継承してるwxCheckListBoxのソースが参考になると思う。
画像管理ソフトみたいなサムネリストが欲しいならwxThumbnailCtrl
って非公式コントロールが楽(古いので2.9系では若干修正が必要)。
ttp://wxwidgets.blogspot.com/2011/02/markup-in-control-labels.html
で紹介されてるマークアップがwxListBoxにも適用されると見た目を
いじるだけならすごく楽になるんだろうけどねぇ。
2011/07/29(金) 07:16:29.38
>>206
ありがと
208デフォルトの名無しさん
垢版 |
2011/08/11(木) 06:56:31.32
自作のTestApp(wxWidgets製)は起動時に渡されたパスを読み込んで処理を
するとして、既に起動しているTestAppがあれば、そのTestAppにパスを引き
渡して自分は死ぬ(多重起動しない)、という動作をしたいです。
Winの場合、EnumWindowsでトップレベルウィンドウでTestAppを探し、
WM_COPYDATAをSendMessageで投げMSWWindowProcで受ける、
という方法を採っていますが、この辺のニーズは常にあるだろうし、
もっと楽なやり方があるんじゃないかと思ってます。
こういう方法の方が楽、とかありましたら教えてください。
2011/08/11(木) 10:26:43.62
Mutex
210208
垢版 |
2011/08/11(木) 20:27:39.52
>>209
コメントありがとう。
でもMutexだと多重起動のチェックには使えるけど、
「既に起動している別プロセスへ任意のデータを引き渡す」
って処理には使えなく無いですか?


2011/08/12(金) 00:44:19.62
・メモリマップファイル
・共有メモリ
・TCP/IP
・DDE/OLE/ActiveX
・ウィンドウメッセージ
好きなの使えばいいよ。普通は都合のいい方法を使って自分で作る。
wxならメッセージが一番楽だろう。
2011/08/12(金) 01:46:19.30
つうか、二重起動防止するAPIが普通にあるだろ。
2011/08/12(金) 12:39:56.45
>>210
元のをポップアップさせてあとのを閉じれば渡す必要なくね?
214デフォルトの名無しさん
垢版 |
2011/08/12(金) 12:42:49.43
一番簡単なのが欲しいなら作業ファイルにデータ書き込め。
いっそ多重起動もdir lockでやっとけ。
2011/08/12(金) 17:59:34.09
wxMutex
ttp://docs.wxwidgets.org/2.9.2/classwx_mutex.html
2011/08/12(金) 18:09:42.10
wxSingleInstanceChecker
ttp://docs.wxwidgets.org/2.9.2/classwx_single_instance_checker.html
217208
垢版 |
2011/08/12(金) 21:25:55.39
なんかいっぱい回答もらえた。ありがとうございます。
誤解を生んで申し訳ないんだけど、多重起動の禁止だけじゃなくて、
データを引き渡すってところまでがやりたいことなんです。

>>211
・メモリマップファイル
・共有メモリ
公式ドキュメントだけ読んで無いと思っていたんですが、
改めて調べたら5年前にパッチとして提出されてました。
「理由は言わないけど却下」と問答無用でRejectされてましたが、
普通に使えました(なんで却下されたんだろう……)

・TCP/IP
ちょっと大掛かりですが、確かにこれだとwxWidgetsのクラスのみで
クロスプラットフォームにいけますね。

・DDE/OLE/ActiveX
MSが意図しているアプリ間通信にはこれを使うべきなんですかね。
クロスプラットフォームからはかけ離れますが。
218208
垢版 |
2011/08/12(金) 22:02:35.23
・ウィンドウメッセージ
はい。最初に書いたとおり、これは把握済です。
ただ、全トップレベルウィンドウを調べるwxWidgetsの関数って
無いですよね?(MS側のAPIはあるけど)

>>213
・起動済アプリを殺して自分が前面に出る
タスクバーに収納されていたり表に出ていたり、というアプリにしているので、
起動済のアプリのそれらの状態を把握するのにちょっと手間がかかりますね。
表示状態のコピーが不要なら確かに比較的手っ取り早いですが。

>>214
・作業ファイルにデータ書き込み&排他制御
大量のデータ通信をアプリ間でやるわけじゃないので、
手っ取り早く汎用性も高くwxWidgetsだけで完結しますね。
しかもクロスプラットフォームで安定している。なるほど。

皆さん色々な案の提示、どうもありがとうございました。
2011/09/02(金) 20:17:08.41
今更なんですが、C++でGUIを考えた場合、wxWidgetsとQTが候補に挙がりましたが
両者の比較を書いているサイトや記事などありましたら教えてください。
2011/09/02(金) 20:28:54.93
自分はQt側のことは知らないんだが、こんなサイトがある

wxWidgetsのススメ
http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html
2011/09/02(金) 23:04:35.91
いまは VC2010Express でも wxWidgets 使えて便利だわ
2011/09/02(金) 23:29:46.37
2.9.2落としてきてVC2008でビルドしてたけど、これgdgdすぎ
スタティックライブラリはできたけど、DLL版は全然ビルドできないわ、サンプルはデバッグ
ライブラリ用になってるからいちいち直さないといけない&直しても同じリソースがどうたら
でビルドできんし、Qtにいくわ
2011/09/03(土) 00:34:44.80
おいらはMinGWでMakefile作りながらGUI作ってるよ〜 (^q^)
2011/09/03(土) 01:05:50.35
ああ、早とちりすまん
結局添付されていたVC2008用のプロジェクトファイルがうんこで、VC6用の奴を変換して
ビルドしたらうまくいきましたわ
サンプルも同じでVC6用の奴を変換してビルドすると正常にビルドできました
悪口いってすまん、けどビルドできないVC2008用プロジェクトファイルって罠じゃないのか
2011/09/03(土) 10:36:44.01
普通makefileの方使わない?
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況