2012年09月プログラム25: 【GUI】wxWidgets(旧wxWindows) その5【サイザー】 (496)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
Cygwin + MinGW + GCC 相談室 Part 6 (945)
Visual Studio 2012 Part4 (348)
C#終了のお知らせ (942)
***Javaのオススメ入門書*** 『創るJava』 3.0 (563)
C#, C♯, C#相談室 Part76 (831)
Subversion r14 (433)
【GUI】wxWidgets(旧wxWindows) その5【サイザー】
1 :2010/04/09 〜 最終レス :2012/11/01 クロスプラットフォーム 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/
2 : >>1 乙
3 : 早すぎね?
4 : 関連スレ 【RAD統合環境】 Qt 総合スレ 7 【Win/Mac/Linux】 http://pc12.2ch.net/test/read.cgi/tech/1270309416/
5 : 早すぎだろ
6 : >>1 乙
7 : このスレッドは天才pンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
8 : ━━━━━━━━〓〓〓〓〓〓〓〓 アイちゃんキター 〓〓〓〓〓〓〓〓━━━━━━━━ とりあえず>>1 乙
9 : >>1 乙
10 : ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ R!R! └─┘ R!R!
11 : ヘ⌒ヽフ ( ・ω・) dd / ~つと)
12 : このRめ
13 : .Netスタイルのメニュー表示できないの? http://www.dotup.org/uploda/www.dotup.org798064.gif 左:.Net 右:wx
14 : >>13 無理なような希ガス。自作するしかないような…(ツールバーならwxAuiでそれらしく見せれるけど)
15 : ヘ⌒ヽフ ( ・ω・) dd / ~つと)
16 : wxPython で作った pnl (=wx.Panel) に書いた画像は取得&保存できた from wx.lib.colourchooser.canvas import BitmapBuffer import wx bb = BitmapBuffer(width, height, wx.Colour(0, 0, 0)) bb.Blit(0, 0, width, height, wx.WindowDC(self.pnl), 0, 0) bmp = bb.GetBitmap() bmp.SaveFile(u'できたよ.png', wx.BITMAP_TYPE_PNG) ちなみに Win32API を使うとこんな感じになるみたい ttp://www.sm.rim.or.jp/~shishido/wincap.html
17 : ヘ⌒ヽフ ( ・ω・) dd / ~つと)
18 : ヘ⌒ヽフ ( ・ω・) dd / ~つと)
19 : クライアント領域だけ透過させることって出来ないか?
20 : 出来る
21 : こういう画像表示をwxPythonでやりたいのですけど Osiva transparent image viewer, Kent Stork http://www.noping.net/kent/osiva/ 画像を、ウインドウ枠無しで、デスクトップにずらずらと表示したいのですが、どこらへんをとっかかりにして始めたらいいのか分かりません。 「このサンプルが役に立つんじゃねえか?」みたいな意見を聞かせてもらえると嬉しいです。 はねまわるウインドウな例 http://python.matrix.jp/projects/wxPython/bounds.html たぶんこのサンプルが役立ちそうな気はしてるんですが、このサンプルでは1つのframeしか表示してなくて… 複数のframeを表示することなんて、wxWidgetsで可能なんでしょうか? もし、できないとしたら、frameの代わりに何が使えそうなのでしょうか…? あるいは、1つの透明なframeの中に、個別にbitmapを表示する感じになるのでしょうか?
22 : 可能
23 : >>21 サンプルの app = wx.App(False) frame = MainFrame() app.SetTopWindow(frame) frame.Show() のところを app = wx.App(False) frame = MainFrame(None) frame1 = MainFrame(None) frame2 = MainFrame(None) app.SetTopWindow(frame) frame.Show() frame1.Show() frame2.Show() と書き換えて実行してみ
24 : WinMainから始まる既存のC&Win32ソースに wxを組み込むのはどうすればいいのでしょうか? SDKメインフォーム+モードレスダイアログ のダイアログ部分を差し替えるイメージです 以下のソースではOnRunを呼ぶと制御が戻ってきません。 それ用のthreadを作れば何とかなるのですが もっとシンプルに出来た記憶があったのですが・・・ wxApp* app = new MyApp(); wxApp::SetInstance(app); int argc=0; wxChar** argv=NULL; wxEntryStart(argc,argv); wxTheApp->CallOnInit(); wxTheApp->OnRun(); while(GetMessage(&msg , NULL , 0 , 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } wxTheApp->OnExit(); wxEntryCleanup();
25 : 答えは前スレにて
26 : >>25 前スレのどこ?アンカおねがい とりあえずOnRunをコメントアウトしたら上手く動いているようではあるけど もっときれいにやれてた気がするんだよなぁ
27 : >>23 ありがとうございます! やってみたらframeが複数表示できました。 件のサンプルを参考にして勉強したいと思います。
28 : >>24 wx.netに入ってるwx-c.dllを使う
29 : wxWidetsをlinuxでコンパイルしてdemoやsamplesが正常に動くことを確認. しかし そのlinuxにOSXからssh-Xとかssh -Yとかで接続して, sapmeles/openglのcubeとかisosurfとかpenguinを実行すると ウインドウは出てくるけどopenglの描画がされないんだけど仕様なの? ssh越しでもdemo(lifeとか)やopenglを使わないsamplesは普通に動くんだけど.
30 : WindowsのwxWidgetsってウィンドウの状態おかしくなってHideやShowが効かなくなったりIsShownOnScreenが変な値返してると思ってたら 他プロセスからのShowWindow、SendMessage、PostMessageとかメッセージ全部拾わずそのままDefWindowProcに渡してイベント上げてこない そのくせ、自分自身でウィンドウの表示状態管理してるから不整合起きまくり HWND取得してWin32APIで状態確認してWin32APIで処理しなきゃダメだ 自プロセスが出した命令のイベントしか上げてこないならEVT_SHOWなんていらないだろ
31 : >>29 オーバーレイをお古 かくかくのろのろだけど
32 : >>31 駄目.なんにも変わらない.
33 : gtkより歴史が古いことに驚愕
34 : gtkは糞
35 : >>34 頑張って置き換えてくれ
36 : gtkしかよう知らん.あれは糞なのか? qtとwxだとどっちが糞なんだ
37 : ライセンス的には一部デフォルト設定から機能オフしないといけないけどwxが自由度高い
38 : >>37 その辺の話ってどこかにまとまってたりしますか?
39 : http://bf109.seesaa.net/article/9267915.html
40 : スレ2にまとめがあったけど GPL - コピペしてもリンクしても感染 LGPL - 動的リンクすれば影響しないが、静的リンクやコピペでは感染 wx - バイナリになっていれば煮ても焼いてもいい。コピペでは相変わらず感染 ということでいいのかな。 >>37 は知らないがどういうこと?
41 : >>40 wxが余計に解らない LGPLをゆるくしたものじゃね?
42 : 567 デフォルトの名無しさん [sage] 2009/10/17(土) 02:23:53 ID: Be: http://www.wxwidgets.org/about/newlicen.htm The wxWindows Licence is essentially the L-GPL (Library General Public Licence) wxWindows ライセンスは 本質的にはLGPL QtがLGPLになって企業サポートがついたいま wxWindowsに利点があるのだろうか?
43 : wxそのものに手を加える場合はLGPL。 単に自分のアプリを作るためのライブラリとして考える場合はバイナリで 自由に使える。ソースコードつけなくてもリンクしようが配布しようが自由。
44 : はじめまして。 wxWidgets(wxWindows)日本語ドキュメントプロジェクトの方々に連絡を取った所 既に更新停止しているとの事なので、プロジェクトを移管して頂きSourceForge.netで 新たにプロジェクトを作りました。これからv 2.8 の翻訳を完成に向けて開始したい と思っています。 https://sourceforge.net/projects/wxwidgetsjpdoc/ 翻訳作業の出来る方募集中です。どうぞご参加ください。
45 : そうなのかー、乙です。 wxはポータブルなんで、日本でももうすこし広がるといいですね。
46 : wxErlang って組み込みになったのか。 http://www.erlang.org/doc/apps/wx/ Erlang/OTP R13A (2009-04-03) から、公式配布物に含む。 (最新はR14A)
47 : Rubyスレで聞いたけど判る人がいないっぽいのでこちらに・・・ wxRuby 0.6.0betaを使ったアプリをwxruby.so同梱で配布する場合に適用されるライセンスは どのようになりますか? バイナリファイルでの配布なら?任意のライセンスを適用出来るみたいですが インタプリタ系の言語でバイナリファイルでの配布とか言われても難しいですし・・・ (exerbで配布したとしてもexeファイルの実態はインタプリター+ソースコードだし) よろしくお願いします
48 : orz = 3
49 : そういうのわ御社の法務部で聞いてください
50 : すみません、誰か教えてください。 wxFormBuilderで作成されたForm内のm_textCtrlXXへの参照・代入ってどうやればいいんですか? 環境はVC++です。
51 : 内容を読み書きしたいってことかな ttp://docs.wxwidgets.org/stable/wx_wxtextctrl.html GetValue、GetLineText SetValue、AppendText この辺りだろう、ってか公式のリファレンスに網羅されてるからすぐ見たほうがいいよ
52 : お返事ありがとうございます。 wxFormBuilderで作成されたクラスがMyFrame1として、 MyFrame1::m_textCtrl28->SetValue(s); とかやってみたけど、ビルドが通ってくれないのです。 (申し訳ございません、C++よくわかってない人です) wxFormBuilderの場合、ここみたいに http://wiki.wxformbuilder.org/Tutorials/UsingSubclass サブクラス化してアクセスするのが正解なのでしょうか。 試してみたけど、なんか上手くいかないんです。
53 : いちおう追記しておきますが、wxFormBuilderベースでプログラム作って、ボタンを押して反応するところまでは成功しまています(一日かかりましたが)。 文字列操作しようとしたらまたハマってしまって困っているのです。
54 : インスタンス化されたMyFrame1からアクセスしないと駄目です MyFrame1 frame; frame->m_textCtrl28->SetValue(wxT("moji")); この場合外側からのアクセスなのでm_textCtrl28のpermissionはpublicになってないといけない クラスの扱いはC++の基本なのでまずそちらから勉強した方がライブラリの理解も早くなります
55 : ごめん3行目ミスw frame.m_textCtrl28->SetValue(wxT("moji"));
56 : おおお! MyFrame1 frame; としてみたところ、 frame. の入力で frame.m_textCtrl28->SetValue までVCの補完が効くようになりました! いけるかなと思ったのですが、ビルドしてみると 「'MyFrame1' : クラス、構造体、共用体に既定のコンストラクタがありません。」 のエラーになってしまいます。 なにはともあれ真理に近づきつつあるようです。ありがとうございます。 C++の勉強します。
57 : MyFrame1 frame; frame = new MyFrame1(NULL); frame->m_textCtrl28->SetValue(wxT("moji")); じゃだめ?
58 : >>57 ありがとうございます。 やはり 「'MyFrame1' : クラス、構造体、共用体に既定のコンストラクタがありません。」 になってしまいます。 コードが継ぎ足し実験しまくりなのが不安なので、シンプルなコードで最初か らやり直してみようと思います。
59 : MyFrame1 *frame = new MyFrame1(NULL); じゃない?newを受けるのはポインタ というかもう少しC の勉強してからのほうがいいと思ふぞ
60 : >>59 ありがとうございます。 まだ継ぎ足し実験コードのままなのですが、試してみました。 MyFrame1 *frame = new MyFrame1(NULL); frame->m_textCtrl28->SetValue(wxT("moji")); としてみたところ、 「protected メンバ (クラス 'MyFrame1' で宣言されている) にアクセスできません。」 というエラーが。 m_textCtrl28をprotectedメンバで宣言しているのはwxFormBuilderが吐き出し たコードで、これはwxFormBuilderとしては「編集しちゃアカん」そうなので すが、m_textCtrl28をpublicメンバで宣言するように直したところ、ビルドが 通りました。でもSetValue(wxT("moji"))の効果はありませんでした。 うーん、勉強します。シンプルなコードでも試してみます。
61 : 日記
62 : 君にとっては新たな発見なのかも知れないが ここ見てるひとは当たり前過ぎてただのノイズ wx やりたいのは解るがしばらく我慢して もう少し C++ の勉強してから改めて取り組んだ方が良い
63 : C++のクラスの複雑さは異常
64 : Windows XP上のmingw+msys(最新安定板)でmakeしたのですが、ld: final link failed memory exhausted エラーでリンクに失敗します。wxMSW(安定板)とwxWidgets-2010-06-30 物理メモリーは2G近くの空き、システムドライブも20G近く空いています。 ネットでエラーを調べてLDFLAGSに-Wl,--no-keep-memoryを追加してみましたが同じ所でエラーになりました。 誰かタスケテorz
65 : 無視してもう一回make
66 : >>65 既に3回くらいやりましたが駄目でしたorz
67 : 3回とも同じ結果? 同じ場所で止まる?
68 : >>67 wxmsw291u_core_gcc_custom.dllを作成中にエラーになるのは同じで、その中でcould not read symbols: Memory exhaustedが起こる、読み込み中のオブジェクトファイルは違う事があるようです。
69 : cleanしちゃだめだぞ
70 : ビルドごとにディレクトリ作ったか?configureは試したか?
71 : 色々と調べたので中間?報告 ttp://comments.gmane.org/gmane.comp.gnu.mingw.devel/3728 多分、同じ現象が報告されていてgcc4.5では起きて4.4では起きないようです。 但しPF使用量を調べると、Win上のメモリ上限の遥か手前で落ちていました。 msysのデフォルトのulimitの仮想メモリの上限が約2GBでこれに抵触したようです。 現在msys上でrootを取得してulimitを変更する方法を検索中です。 ・・・msysはsuが壊れてるとかイミフ(ry >>69 cleanはconfigureの--enable-debugフラグを変更した時にしかしていません。 その他はLDFLAGSのみを変更してmakeを試しました。 >>70 ディレクトリは変更していません。configureをやり直した場合はcleanで対応しました。 wxWidgetsではなくてmsys固有の問題の可能性があります。 その場合にはmingw相談室で質問後結果報告させて頂きますね。<その方が良いですよね?自信がないです・・・。
72 : なんかサイザーの処理が最適化されていないのか、複雑なレイアウトを組むと 再描画に凄く時間が掛かる。 何か回避策や対策などがあるようならば教えてください。
73 : wxを窓から捨てる
74 : RADツール使ってサイザーやスペーサーを極力使わない構造を見つける
75 : リサイズしないウィンドウにしても、再描画時にサイザーの計算を しているっぽいので、そこをもう計算させないっていう様な設定が 出来たらしたいのです。 結局、複雑にサイザー使ってボタンとかびっちり詰め込むと サイザーの計算が重くなるのは仕方ないなとも思うので、 固定さえ出来れば問題なくなるはずです。
76 : 各コントロールごとに座標を想定してたりしないか?そういう使い方するもんじゃない ボックス系のサイザーとグリッド系のサイザーを適切に使えば綺麗にまとまるし さほど重くもならないと思うんだけど
77 : あとコントロール、サイザー共にExpandとStretch(proportion)はちゃんと個別に見直すべき そのあとでBorder、埋めきれないとこはSpacer
78 : wxFormBuilder 3.1 Python対応 C++で日本語でもANSIで吐けるようになってるのを確認
79 : >>76 ちょっと見直してみたら、ボックスサイザーを入れ子にしてる所があるな。 そういうのは、グリッド系にすべきって事かな。
80 : サイザーごときで重くなるって 100個とか1000個単位で びっしり詰めてるのか?
81 : とりあえず、コントロールは100個近く詰まってはいる。 動作が重いというか、ウィンドウを(最小化などから)表示した時に 普通はパッというぐらいの速度で表示されるけど、それがパラパラっと コントロールが配置されるのが見えるって感じ。
82 : >>78 wxFormBuilderって物凄く安定しているのがスゲーと思った。 こういうのって不安定なものが多いから感心した。 ちなみに、Windows版。
83 : 以前に作ったコントロール90くらいのダイアログ見つけたからwxFormBuilder通して見てみたけど C2D E6600でもこの程度では特に重いとは感じない、というか変化がない SS見せてくれたら試しに組んでみてもいいよ
84 : 透過GIFを背景画像の上にぺたぺた貼り付けたいんだけど、透過GIFを入れたwxStaticBitmap を配置するだけだと背景色で透過部分がfillされます。styleをTRANSPARENTにしても効かない。 ウィンドウのDCを取得して、wxDC::DrawBitmapで地道に描かないとだめですかね?
85 : styleをTRANSPARENT SetMaskColour
86 : wxTextCtrlでカーソル位置にテキストを挿入するのってどうやるのが楽? GetInsertionPointの前後で分割して、入れたい値を合成して 再挿入、ってやったけど どうも改行があると値がずれるようなんで困ってて。
87 : 自己解決。Replace使えば良かったのか。 スレ汚しすまんかった。
88 : >>86-87 普通にWriteTextで キャレット位置に挿入(選択状態なら置換)出来るのでは?
89 : >>88 ……その通りでした。 ちゃんと隅々までドキュメント読むべきでした。 遅くなったけどどうもありがとう。
90 : >>83 その後、同一マシン上のVMwareでWindows2000とWindows7を実行して試してみたら、 Windows7上では同じ遅さだったけど、Windows2000ではめっちゃ速かったから 少なくともサイザーが遅いって事はなさそう。 ただ、VS2010上でビルド出来ないし、新しいプラットフォームの追従はあまり 早くないね。3.0が出てくれれば解決するのかな。
91 : >>90 単にスワップ起こしてるだけじゃねーの? 2GB程割り振って検証してみたら?
92 : >>90 VS2010のx64でビルドして使ってるけど、特においらの範囲では問題ないな。 VC6プロジェクトがVS2010で変換できないってことなら、VC2005か、VC2008で変換してからVS10で開けば通るよ。 2.9.xならVC8,VC9用のプロジェクトもある。
93 : >>92 > VS2010のx64でビルドして使ってるけど、特においらの範囲では問題ないな。 再描画の時に「パッ」じゃなくて「パラ」って感じなんで、まぁ問題っていうほど じゃないんだけどね。 > VC6プロジェクトがVS2010で変換できないってことなら、VC2005か、VC2008で変換してからVS10で開けば通るよ。 なるほど、その手があるのか。ありがとう。
94 : wxURLのProxy処理にバグがある・・・? GETしたいURL: http://www.google.com/ 使うProxy: localhost:8080 このとき、Proxyへリクエストヘッダを見てみると GET http://www.google.com/ HTTP/1.0 Host: localhost になってて、Proxyがlocalhostの/を取りに行こうとする。 RFCをちゃんと読んでないのでこれも正しいのかもしれないけど、 一般的なブラウザだと GET http://www.google.com/ HTTP/1.0 Host: www.google.com になってる。 送信先がhttpならHostをwww.google.comに書き換えないといけない (実際そうしてみたら手元の環境では動く)と思うんだが、俺間違ってる? 一応最新のソースをTrunkから落としてきてるけど、こんな単純なところでミス してたらテスト通らないだろうし… 俺が何かくだらないミスしてる気がしてならないので、誰かツッコミ入れて下さい。
95 : >送信先がhttpならHostをwww.google.comに書き換えないといけないと思うんだが、俺間違ってる? あってる
96 : wxURL_NOHOST
97 : これかな http://yomi.mobi/read.cgi/pc8/pc8_tech_1097524712/515-
98 : wxRIchTextCtrlの日本語インライン入力パッチありませんか?
99 : おや規制明けてる。 >>98 もう解決してる気がするけど、OS毎で処理系が全く異なる上、 日本と中国と韓国くらいしか影響がないのでそんな便利なパッチはたぶん無い。 RichTextはわからんが、Win上のwxStyledTextCtrlと同じなら、 MSWWindowProcをオーバーライドして、 WM_IME_STARTCOMPOSITION、WM_IME_COMPOSITIONあたりを捕捉、 Caretの位置から自分で逐次IMEの位置情報を変更してやればいいと思う。 しかし上でwxURLの話もされてるけど、HTTP通信周りの処理、 結構ボロボロだなコレ。 そういう用途で使ってるユーザがほとんどいないんだろうが・・・。
100 : UI以外の部分でwx使う意味ってあんまりないからじゃない?
101 : そうか
102 : もう誰か作ってるだろと探したけど wxOnigurumaとか無かった。残念。
103 : 詳しい方ちょっと教えて下さい…。 ちょっと前からxchmというヘルプビューアを日本語表示できるようにしているのですが、 ShiftJIS->Unicodeの変換がうまくいきません。 一応wxString、wxMBConv、wxCSConv、wxEncodingConverterのリファレンスと ヘッダにある関数の組み合わせは一通り試したつもりですが、変換されるはずが 変換されなかったり、Initに失敗したりと散々です。 結局g_convert関数(GLibのiconvラッパー)で逃げましたが、wxWidgetで 書かれているソースに突如異物混入みたいで非常に美しくありません。 動作はしたので後は趣味の問題ですが、なんとかならないでしょうか? 環境はDebian、wxWidgets 2.6.7.1です。
104 : 2.9のドザーな俺にはアドバイスはできんが、 この辺で問題視されてる「wxMBConv はいくつかのサブクラスを持っていて、 こいつらはことごとく wchar_t の内部表現が UCS であることを仮定してる。」 あたりが原因じゃないのか? ttp://diary.imou.to/~AoiMoe/2004.09/middle.html#2004.09.13
105 : >>104 早速感謝。 あー、そのページ、自分も見ました。 今ネット上にある日本語ページの中では一番内容が濃そうでしたね。 wxWidgetsが文字コード回りで大分無茶をしてるらしいことだけは判りました。 実際、文字コード変換には一旦wchar_t型を経由しないとならんのですけど、 charのSJIS->MB2WC->WC2MB とかやると、SJISでもUTF8でもない謎コードになっちゃうんですよね。 ちなみに、前スレでもWin使いの方が全く同じ趣旨の質問されてましたけど、 結局やはりWinAPIでなんとかしたらしいですね。 やっぱり無理ですかねぇ…。
106 : wchar_t の中身がUCS前提なのはこの場合問題じゃないだろ… >>104 の言っているUnicodeって、具体的に何?wxはUnicodeビルドで、wxStringにしたいの? SJISからwxStringにしたいのなら、 wxString s(sjis_string, wxCSConv('cp932')); を試した? コード出さないで質問しても、エスパーじゃない限り回答できないよ。
107 : >>106 あ、書き忘れてましたね、すいません。 入力はマルチバイト(char)のShiftJIS、欲しい出力はマルチバイト(char)のUTF-8で、 wxはDebian etchのものなのでUnicodeビルドです。 上のコードはもちろん試しました。 で、そこからどうすればchar型のUTF-8が得られるのか、もしくは別の方法を使うべき なのかで悩んでいるのが現状です。 ちなみに、成功例はこちら #include <glib.h> char *utf8_str = g_convert(sjis_str, -1, "utf-8", "cp932", NULL, NULL, NULL); で、これと同等のことをwxで行うにはどう書けばいいか?という質問です。 (この前後にwxベースのコードとやりとりするための処理が入るのですが、それが また汚いので、できれば回避したいです…)
108 : 言い訳はいいから問題起こしてる例のコードだせよ
109 : >>108 えー、失敗コードはもう全部消しちゃったんですよね…。 てか、ここまでの説明で判る方は判るし、判らん方はそこまででしょう。 この場合、頑張って失敗コード再現しても結果は後者だと思うので、No thank you.
110 : エスパーのかたのみお答えください
111 : 便乗して質問してもいいかな? wxMBConvとwxCSConvの違いって何? ヘルプ見てもよくわからん…
112 : >>111 wxMBConv は、変換系の抽象クラス。 wxCSConv は wxMBConv を継承した具象クラスで、 >>106 みたいに任意のエンコーディングとの変換を行う。 wxMBConvUTF8 も wxMBConv を継承した具象クラスで、 UTF-8との変換を行う。
113 : >>112 なるほど。ありがとう。
114 : http://ja.pastebin.ca/2003497 少なくともUbuntu 10.10では、wxCSConvでちゃんとcp932からUTF-8への変換ができたよ。 Debian etch とか古すぎて使う気にならないけど。
115 : >>114 多謝!! こっちでも試してみましたけど、できた!?ばかな!? 記憶を頼りに前回のコードと比較してみたら、違いが判りました。 OK: wxCSConv(wxT("cp932")) NG: wxCSConv(wxFONTENCODING_CP932) …こいつら違う意味なのかよ!? ちなみに、後者だとSJISでもUTF-8でもないデータになりました。 で、wxWidgetsのソースを読んでみました。 wxCSConv::wxCSConv(const wxChar *charset) { ... m_encoding = wxFontMapperBase::GetEncodingFromName(charset); } wxCSConv::wxCSConv(wxFontEncoding encoding) { ... m_encoding = encoding; } で、wxFontMapperBase::GetEncodingFromName(wxT("cp932"))は87でした。 wxFontEncodingはenumなので、じゃあ87はなにかというと、 wx/fontenc.h: wxFONTENCODING_MAX, // highest enumerated encoding value うん、意味が判らないんですが、これってwx使ってる方からしたら常識だったりしますか? それと間違えてました、使ってるのはetchでなくlennyでした、スイマセン。
116 : C++ の勉強からやり直せ
117 : xchmのコード変更完了! おかげさまで変更箇所が50行が4行になり、かなりすっきりしました。 相談に乗って頂いた方、大変有難うございました。
118 : fmapbaseの中にwxFONTMAP_CP932のエンコーディング名として最初にWINDOWS-932という 文字列が登録されていて、iconv にはこの名前のエイリアスが登録されていないから iconv に 失敗する、、、んだけど、iconv_open に失敗したらWINDOWS-932の次のCP932が利用されるように 見える。なのに失敗してる。 深追いはしてないからどこでコケてるのか判らないけど、とりあえず wxCSConv にはエンコーディング名を 直接渡したほうが、その名前が直接 iconv に渡るから落とし穴が少なそう。
119 : なるほど。ありがとう。
120 : >>118 あー、そういうことでしたか、なるほど。 感謝!
121 : 名前を間違えて107にしてしまった。 >>117 xchm の修正って、本家にフィードバックする予定ありますか? Linuxでもchmファイル読めたら便利そう。
122 : >>121 フィードバックの予定は特に無いです。 というか本家、まだ生きてるんだろうか? Ad-hocだけど、ここにパッチ貼っときます。 これでコンテンツと索引がちゃんと日本語で表示されるようになります。 検索の日本語対応は、ぱっと見かなり難しそうだったので保留中です。 むしろ誰かやって下さい…。 ちなみに、Linuxでchm読むだけでしたら他にもいくつかビューアがあるようですよ。 ご参考まで。
123 : +diff -urN xchm-1.17.orig/src/bitfiddle.inl xchm-1.17/src/bitfiddle.inl +--- xchm-1.17.orig/src/bitfiddle.inl 2010-11-27 17:21:37.000000000 +0900 ++++ xchm-1.17/src/bitfiddle.inl 2010-11-27 18:00:13.000000000 +0900 +@@ -194,10 +194,10 @@ + return wxEmptyString; + + if(enc != wxFONTENCODING_SYSTEM) { +- wxCSConv convFrom(wxFONTENCODING_ISO8859_1); +- wxCSConv convTo(enc); +- +- return wxString(input.mb_str(convFrom), convTo); ++ if (enc == wxFONTENCODING_CP932) ++ return wxString(input.To8BitData(), wxCSConv(wxT("cp932"))); ++ else ++ return wxString(input.To8BitData(), wxCSConv(enc)); + } + + return input;
124 : +diff -urN xchm-1.17.orig/src/chmfile.cpp xchm-1.17/src/chmfile.cpp +--- xchm-1.17.orig/src/chmfile.cpp 2010-11-27 17:21:37.000000000 +0900 ++++ xchm-1.17/src/chmfile.cpp 2010-11-27 19:35:02.000000000 +0900 +@@ -1056,10 +1056,8 @@ + #endif + topic = CURRENT_CHAR_STRING(combuf); + #if wxUSE_UNICODE +- else { +- wxCSConv cv(_enc); +- topic = wxString((const char *)combuf, cv); +- } ++ else ++ topic = translateEncoding(CURRENT_CHAR_STRING(combuf), _enc); + #endif + } +
125 : wxPythonでとあるチャットのクライアントを作っているのですが wx.(Rich)TextCtrlでは打ち消し線は使えないのでしょうか?
126 : >>125 wxFONTFLAG_STRIKETHROUGHを指定したフォントを適用してやるとかで できるんじゃない?
127 : ありがとうございます。 font = wx.FFont(8, wx.DEFAULT, wx.FONTFLAG_STRIKETHROUGH) self.target.SetFont(font) FONTFLAG_STRIKETHROUGHを指定してみたのですが、打ち消し線が表示されません。
128 : wxWidgets2.8.xに実装されているウィジェットの表示サンプル一覧とかないですかね? サンプルを実行してみないとどのように表示されるのか判らないのはかなり不便・・・('A`)
129 : demosも一緒にインストール汁
130 : >>127 ttp://trac.wxwidgets.org/ticket/9907 打ち消し線が有効化されるパッチ。 ただし2.9。
131 : >>130 遅れましたが、ありがとうございます。 wxWidgets用のパッチのようなのですが、 wxPythonに適用させる方法がわかりません・・・
132 : Androidに対応してくれないかなぁ・・・
133 : AndroidやiPhoneもそうだけど、Mac対応(wxCocoa)もしっかりして欲しい。 このままじゃ何時まで経っても64bit化出来ない。 やっぱり企業の後ろ盾がないプロジェクトはきついかもね。
134 : Qtは人気あるのに、こっちは盛り上がらないね。
135 : QtはLGPLがヤダ
136 : >>134 枯れてるからね
137 : ほとんど同じ時期じゃね? wx Initial release 1992 Qt Initial release 1992; 19 years ago wxの敗因は、やっぱ製品として売り出してないからじゃね?
138 : Android => Java, Google gtk,Mono => Suse, Microsoft Qt => Nokia, Google, Intel wxwidget => ???
139 : 何の矢印だよ、それ。
140 : 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 : つ ttp://codepad.org/SaG84FKe
142 : レスありがとう。ってPython!?Σ(゚Д゚) わざわざ書き直してくれたのに申し訳ないけどRubyでコーディングしたいので・・・ とりあえずいじり回していたら思いついた案 1.Ruby 1.8系を使用。wxImage::load_streamを使う ファイルの自動判別が出来ない 2.Ruby 1.8系を使用。Rubyのファイルパスを扱うメソッドをUTF-8に対応するように再定義 数が多くコーディング量が多い。デバッグも大変 3.RubyでwxPythonを使う まだ実験していない。動いたとしても関連ライブラリのサイズがでかくなりそう? どれもイマイチだ(´・ω・`)
143 : Ruby知らんけど、単に文字コード変換するんじゃダメなの?
144 : コントロールに画像使うとリソース食うから サムネにはお勧めできない
145 : GUIやるならPythonの方が良いと思うけどなぁ。 Windowsと日本語はもちろんだけど、>>140 のBlog見てるとスレッド周りにも 問題あるみたいだし。
146 : >サムネイルを作成する間ウィンドウがブロックしないよう、サムネイルの作成は別スレッドで行っている。 >(ただし、サンプルということで、排他制御は一切やっていない) > >イベントループのあるメインスレッドからのスレッド切り替えが円滑に行われるよう、 >メインスレッドではタイマーを使って定期的に Thread.pass している。 > > Wx::Timer.every(100) do > Thread.pass > end > >これが必要になる理由については次のエントリでやる予定。 謎のコード
147 : >>142 べつに謝らんでもええよ 漏れは困ってへんから
148 : >>146 ttp://d.hatena.ne.jp/h1mesuke/20100508/p1 ここのコメ欄の方が怖いぞ。
149 : Ruby使ってないから気にしない
150 : wxWidgetsでアニメ(not 動画ファイル。MNG or 連番PNGを想定)を表示したいのですが 単に表示されている画像をインターバルで書き換えていく方法だとフリッカーが出てしまいます 再描画と画像の書き換えの同期が取れていないためだと思いますが同期させる方法が判りません 何か良い方法があったら教えてください。よろしくお願いします
151 : ソース貼れ
152 : >>150 wxBufferedPaintDC使え。
153 : レスthx >>152 なるほどそう言うのがあるのか。試してみます
154 : 2.9.1が出てから音沙汰無いな
155 : >>152 フリッカーを無くせました。ありがとうございました
156 : >>154 ttp://wx.ibaku.net/changelog/ 連日どんどん更新されてるけど音沙汰ない?
157 : 前スレがやっと埋まったぽい。埋めた人お疲れさま。
158 : つうか次スレ立てるの早過ぎだろ
159 : このライブラリタダ?
160 : EVT_LEFT_DCLICK で bind して処理しようとすると EVT_LEFT_UP EVT_LEFT_DCLICK が同時に来るみたいなのですが EVT_LEFT_DCLICK だけ受け取るにはどうすれば良いでしょうか?
161 : >>160 wxMouseEventのLeftDClickで判別すればいいんじゃないの?
162 : GoogleIME使ってるんだが、TextCtrlで未変換文字列とか変換候補とかが表示されないのは仕様か? MSIMEならちゃんと表示された
163 : >>162 ありがとうございます 試してみましたが 結局 EVT_LEFT_DCLICK に bind された handler 内では LeftDClick なのですが 同時に EVT_LEFT_UP に bind された handler も呼ばれてしまっていて そっちでは LeftDClick じゃないとみなされるので区別出来ないんです ><
164 : wxApp の OnInit で wxFrame *frame = new wxFrame(hogehoge); としたとき wxFrame を delete しないようですが 勝手に GC してくれるんでしょうか? SetTopWindow(frame); を実行したときとしないときでは違いますか?
165 : メモリ以外の資源の解放をGC任せにする男の人って
166 : >>164 wxWidgetsでは自分で解放すると返って二重解放になる。 ttp://www.wxwidgets.org/docs/faqcmn.htm FAQに書いてあるから今後はよく読もうな。
167 : 主にwindowsで使っていますがlinuxでも同じソースで動くようにしたいです wxStringで与えられたあるパス名がフルパスか相対パスかをwxWidgetsのクラス (例えばwxFileName等)を使って判断出来ますか?
168 : >>167 wxFileNameにIsAbsoluteというのがあるけども。 それすら調べられないようだとwxに限らずプログラミングは厳しいと思う。
169 : ポインタ置いときますね。皆さん先刻ご存知かもしれませんが。 wxWidgets(wxstd.moの日本語版, ja.po)をお使いの皆様へ ttp://suzumizaki.blog6.fc2.com/blog-entry-207.html
170 : >>164 こっちも読んでおくといいよ。 二重開放以外にもdeleteがまずい理由があるようだから。 ttp://docs.wxwidgets.org/trunk/overview_windowdeletion.html
171 : >>168 出来ました!! ありがとうございました!!!
172 : wxListCtrl の SetItem - GetItemText とか SetItemText - GetItem とか なんか変な対応してるみたいなんですけど こんなもんなんですか? 他にも IsIconized とか IsShown とか ドキュメント通りじゃなくて めちゃくちゃな感じがするんですが 設計者ってパラノイア?
173 : 馬鹿には無理 つ ttp://wiki.wxwidgets.org/WxListCtrl Get the String Contents of a "cell" in a LC_REPORT wxListCtrl
174 : >>173 出来ました!! ありがとうございました!!!
175 : 質問です wxWidgetsにはMD5やSHAを計算してくれる関数はありますか?
176 : つttp://wxwidgets-hash-md5.fyxm.net/
177 : >>175 176じゃないけど、MD5単品ならこういうのとか。 ttp://www.koders.com/cpp/fid80078010DEFC2265E917FE6436718F0AE038CBE6.aspx
178 : >>178 ありがとうございます とりあえず別のMD5ライブラリが見つかったのでそちらで間に合わせたのですが ライセンスの問題とか考えると教えて頂いたもので置き換えた方が良いかも知れません 余力があったら後でご報告します
179 : wxHTTP::GetResponse が 200 とか 403 とかじゃなくて 0 を返すんですけどバグですか?
180 : つ ttp://wiki.wxwidgets.org/WxHTTP
181 : >>180 出来ました!! ありがとうございました!!!
182 : 文字コードの変換というか 変換出来ない文字が含まれているかどうかのチェック方法について質問です。 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 版のを使っています。
183 : むしろUTF-8のまま扱うかUNICODEにしてしまった方が良いのでは?
184 : >>182 wxStringOperations::IsValidUtf8String
185 : >>184 ありがとうございます。 今レス見たばかりなのでまだ試していませんが、 http://docs.wxwidgets.org/trunk/annotated.html を見ても wxStringOperations は見当たらず ネームスペースかとも思うのですが、 こういったものはどうやって見つければ良いものですか?
186 : >>182 wxString::FromUTF8Unchecked
187 : >>185 http://trac.wxwidgets.org/wiki/DebugRelease
188 : >>186 ありがとうございます。 しかしそれは Valid じゃない UTF8 データが渡されたときの 動作は undefined だと書かれていますね。 結局事前に調べないといけないことにかわりないようです。 >>187 ありがとうございます。 中身を読んでも良く判りませんでした。 どういう意味でしょうか?
189 : ん? 「〜」301C(E3809C) はValidじゃないのか?
190 : 問題なのはUTF-8として正しいかどうかじゃなくて cp932に変換出来るかどうかってことなんだよな そうなるとスレ違いかもな
191 : wxWidgetsって、けっこうS-JISの処理が弱いので、そこの部分だけはネイティブの処理にしたほうがいいかも 俺もアプリ作った事あるけど、S-JISに変換する部分だけはWideCharToMultiByte関数を呼ぶようにしたよ
192 : >>184 残念ながら使えませんでした。
193 : >>192 wxUSE_UNICODE_UTF8 を定義してないと使えないよ つ ttp://docs.wxwidgets.org/trunk/overview_string.html
194 : みなさん色々とありがとうございます。 wxString sjis_data = wxString::FromUTF8(utf8_data.c_str()); のところで例外出して死ぬパターンと sjis_data が空になるパターン それからちゃんと成功するパターンとがありました。 結局アクセスしていたサイトに広告が入っていて、 時間帯によって内容が変わるようなのですが、 どうも本体は UTF8 なのに広告部分だけ SJIS とか、 お粗末なサイトだったのが混乱した原因の一つでした。
195 : 3.0マダー(AA略)
196 : サイザーage
197 : 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 : GUI の配置は XML で定義出来るのが一番良いなあ
199 : それ何てXUL
200 : wxだってXRCがあるじゃまいか。
201 : 誰も無いとは言ってないぞ
202 : 後出しww
203 : ネタにマジレスww
204 : なんのこっちゃ。
205 : リストボックスのアイテムとして ボタンやテキストボックスを表示できる?
206 : >>205 wxListBoxそのままでは無理。 テキストボックスだけでいいならwxEditableListBox使った方が早い。 それ以外でちょっとだけコントロールを付け足したいだけなら、 wxListBox継承してるwxCheckListBoxのソースが参考になると思う。 画像管理ソフトみたいなサムネリストが欲しいならwxThumbnailCtrl って非公式コントロールが楽(古いので2.9系では若干修正が必要)。 ttp://wxwidgets.blogspot.com/2011/02/markup-in-control-labels.html で紹介されてるマークアップがwxListBoxにも適用されると見た目を いじるだけならすごく楽になるんだろうけどねぇ。
207 : >>206 ありがと
208 : 自作のTestApp(wxWidgets製)は起動時に渡されたパスを読み込んで処理を するとして、既に起動しているTestAppがあれば、そのTestAppにパスを引き 渡して自分は死ぬ(多重起動しない)、という動作をしたいです。 Winの場合、EnumWindowsでトップレベルウィンドウでTestAppを探し、 WM_COPYDATAをSendMessageで投げMSWWindowProcで受ける、 という方法を採っていますが、この辺のニーズは常にあるだろうし、 もっと楽なやり方があるんじゃないかと思ってます。 こういう方法の方が楽、とかありましたら教えてください。 と
209 : Mutex
210 : >>209 コメントありがとう。 でもMutexだと多重起動のチェックには使えるけど、 「既に起動している別プロセスへ任意のデータを引き渡す」 って処理には使えなく無いですか?
211 : ・メモリマップファイル ・共有メモリ ・TCP/IP ・DDE/OLE/ActiveX ・ウィンドウメッセージ 好きなの使えばいいよ。普通は都合のいい方法を使って自分で作る。 wxならメッセージが一番楽だろう。
212 : つうか、二重起動防止するAPIが普通にあるだろ。
213 : >>210 元のをポップアップさせてあとのを閉じれば渡す必要なくね?
214 : 一番簡単なのが欲しいなら作業ファイルにデータ書き込め。 いっそ多重起動もdir lockでやっとけ。
215 : wxMutex ttp://docs.wxwidgets.org/2.9.2/classwx_mutex.html
216 : wxSingleInstanceChecker ttp://docs.wxwidgets.org/2.9.2/classwx_single_instance_checker.html
217 : なんかいっぱい回答もらえた。ありがとうございます。 誤解を生んで申し訳ないんだけど、多重起動の禁止だけじゃなくて、 データを引き渡すってところまでがやりたいことなんです。 >>211 ・メモリマップファイル ・共有メモリ 公式ドキュメントだけ読んで無いと思っていたんですが、 改めて調べたら5年前にパッチとして提出されてました。 「理由は言わないけど却下」と問答無用でRejectされてましたが、 普通に使えました(なんで却下されたんだろう……) ・TCP/IP ちょっと大掛かりですが、確かにこれだとwxWidgetsのクラスのみで クロスプラットフォームにいけますね。 ・DDE/OLE/ActiveX MSが意図しているアプリ間通信にはこれを使うべきなんですかね。 クロスプラットフォームからはかけ離れますが。
218 : ・ウィンドウメッセージ はい。最初に書いたとおり、これは把握済です。 ただ、全トップレベルウィンドウを調べるwxWidgetsの関数って 無いですよね?(MS側のAPIはあるけど) >>213 ・起動済アプリを殺して自分が前面に出る タスクバーに収納されていたり表に出ていたり、というアプリにしているので、 起動済のアプリのそれらの状態を把握するのにちょっと手間がかかりますね。 表示状態のコピーが不要なら確かに比較的手っ取り早いですが。 >>214 ・作業ファイルにデータ書き込み&排他制御 大量のデータ通信をアプリ間でやるわけじゃないので、 手っ取り早く汎用性も高くwxWidgetsだけで完結しますね。 しかもクロスプラットフォームで安定している。なるほど。 皆さん色々な案の提示、どうもありがとうございました。
219 : 今更なんですが、C++でGUIを考えた場合、wxWidgetsとQTが候補に挙がりましたが 両者の比較を書いているサイトや記事などありましたら教えてください。
220 : 自分はQt側のことは知らないんだが、こんなサイトがある wxWidgetsのススメ http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html
221 : いまは VC2010Express でも wxWidgets 使えて便利だわ
222 : 2.9.2落としてきてVC2008でビルドしてたけど、これgdgdすぎ スタティックライブラリはできたけど、DLL版は全然ビルドできないわ、サンプルはデバッグ ライブラリ用になってるからいちいち直さないといけない&直しても同じリソースがどうたら でビルドできんし、Qtにいくわ
223 : おいらはMinGWでMakefile作りながらGUI作ってるよ〜 (^q^)
224 : ああ、早とちりすまん 結局添付されていたVC2008用のプロジェクトファイルがRで、VC6用の奴を変換して ビルドしたらうまくいきましたわ サンプルも同じでVC6用の奴を変換してビルドすると正常にビルドできました 悪口いってすまん、けどビルドできないVC2008用プロジェクトファイルって罠じゃないのか
225 : 普通makefileの方使わない?
226 : nmakeしたらいきなりエラーで止まったし、ぐぐるとnmakeよりもVC++上でコンパイルする記事が多かった ので、そうしてました。 お騒がせして申し訳ないついでに実は開発版の2.9.2をビルドしようとしてたみたいで、俺死にたい... というよりR>俺
227 : VC使わないといけない理由があるんなら仕方ないけど gccの方がすんなり行くんじゃないかなぁ。
228 : WinでgccというとMinGだよね? たまたまVC入ってたからVCでやってたけど、MinGの方が捗るの?
229 : wxWidgetsの開発はLinuxのgccで行われてるだろうからMinGW+gccだと環境づくりが楽かも? VCのことは知らないけどMinGWだと普通に2.9.2コンパイルできたし コーディングの効率を考えるとVCのオートコンプリート機能が使えたら楽かもしれんが、たぶん出来んだろうしな
230 : winでわざわざMinGなんて使う必要ないよ。 VCでいい。
231 : MinGWだとEXEサイズ小さくなるかなと試してみたが、makeしてもlibができないなぁと1時間も 悩んでた、.aで正しいのにwww アホすぎる俺 しかしwxWidgetsいいね、コントロールは揃ってるし、ドッキングもできる、開発版にすればリボンもどきも 使えるし、wxFormBuilder使えばGUIで画面組み立てられるし、とりあえず満足できる環境だし
232 : MinGWでビルドした奴とVC++2008でビルドした奴を比較してみたけど、 VC++2008でビルドしたサンプルauidemo.exeは6073KB、MinGWでは9761KB、stripかけて6645KBだった どちらもデバッグなしのリリース版なんだけど、MinGWの方がでかくなるのね Dumpbinで依存DLL調べてみたら、VC++2008の方は標準DLLのみでVCランタイム依存もなし かたやMinGWはやり方が悪いのだろうけどlibgcc_s_dw2-1.dll、libstdc++-6.dllに依存してた VC++2008の方が優秀な気がする
233 : >>232 MSYS上から、 g++ -static -o test.exe test.cpp `wx-config --cxxflags` `wx-config --libs` こうかな? -staticオプションつければOKのはず。 以下、wxをビルドしたときの設定。MinGW-w64でもいけました。 ./configure --with-opengl --enable-ipv6 --disable-shared --disable-monolithic --enable-unicode --enable-official_build --disable-threads --prefix=/mingw
234 : ちなみにgccは-sオプションをつけると結構ファイルサイズは小さくなる
235 : あ、既出だった
236 : >>233-234 アホな俺にわざわざありがとう! もう1回試してみます!
237 : >>230 なるほど人によるなあ。 俺なら「わざわざVC使わんでも、MinGでいい」って発想になるわ。
238 : >>233 ライブラリも作成し直し、サンプルもビルドし直しましたがサイズは6621KBでした あとDLL依存はとれないのですね
239 : >>237 同意。 UNIX文化的には、gccが「標準」でVCは「非標準」って認識だからなぁ。 自分で何か書く時とか、「自分はgccしか使わないけど、Win使いのためにVCもサポートしてやるか」ってレベル。
240 : 結局どっちの文化に属してるかによって 何がデフォで何がわざわざなのかが違うってことで。 で、wxそのものがUNIX文化なんだよな。
241 : >> 238 サンプルはそのままビルドするとDLL依存になるとおもう。 cd samples make "LDFLAGS = -static" こんな感じでいかかでしょ。
242 : >>241 いや、自分でmakeファイルに-static直書きしたけど駄目でした まぁ、なんか勘違いしてるか頭がアホなんて理解できてないだけでしょう とりあえずVCでも問題ないのでVCでやります、いろいろありがとうございました
243 : >>242 がんがれ。 ただ、オープンソース系のライブラリを今後使っていくんなら いずれにしてもgcc系の流儀とかも覚えておいた方がいいと思うよ。
244 : call vcvarsall pushd build\msw nmake -f makefile.vc BUILD=debug UNICODE=1 USE_GDIPLUS=1 SHARED=1 RUNTIME_LIBS=dynamic popd こんな感じでいいんじゃね あと2.9.2はstableじゃないけどいいの?
245 : 質問お願いします。 http://www.dotup.org/uploda/www.dotup.org2004935.jpg こういうよくある(名前、種類、ディレクトリ、サイズ)みたいなのを 表示したいんですがヴィジェットは何を使ったらいいでしょうか? できれば画像のように名前のところの矢印みたいなのを付けたいのと 項目の順番をD&Dで入れ替えたり表示、非表示をポップアップメニューで行いたいです。 項目にはDBのカラムを割り当てたいと思っています。
246 : すいません、listctrlで出来そうですね。 なんでいつも質問した後は簡単に見つかるんだろう…
247 : age
248 : sage
249 : wxWidgetsのライセンスって何なの(L-GPL)? これ使って書いたプログラムってソースコード開示する必要あるの? 教えてエロい人!!
250 : ゴメン、答えられるけどエロくない。
251 : インポ乙
252 : まあその質問はググッたらでてきそうだしな… ところで組み込み用のwxWidgetsとかないんだろうか。
253 : >>249 試しにググッたら意外と出てこなかったので教えてやるでおじゃる http://web.archive.org/web/20080919161353/http://www.geocities.co.jp/SiliconValley-Cupertino/8526/wxWindows/license.html http://ms2.seesaa.net/article/3184354.html
254 : 情報古過ぎないか
255 : 世界線は変わらなかった
256 : つうか本家のホームページに書いてあるがな。
257 : これですね http://www.wxwidgets.org/about/newlicen.htm "wxWindows Licence"で配布されていて、 ソースコード開示の必要はないというのが一応の答えかな
258 : 需要があるかどうか不明ですが。 wxWidgetsマニュアルにある Syntax of the builtin regular expression library の邦訳です。 拙作ソフト説明書の一部になっていますが、この頁の訳文に関してはご利用自由です。ただし独自訳多数。 http://h12u.com/hmo2/manual/%E8%A8%AD%E5%AE%9A%E7%AA%93%E5%8F%A3/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE%E6%96%87%E6%B3%95.html
259 : >>258 乙です てかwxWidgetsにも正規表現ライブラリあったんだな
260 : >>258 正格表現って初めて見たが、正則表現ではなくて? POSIXブラケットのうち、[. .] [= =] [:<:] [:>:]とかって他のライブラリじゃほとんど見ないな。 [[=A=]]ってAやÄなどにマッチするんだっけ?
261 : >>260 ご指摘Thx. 直しておきました。どこで間違ったんだろう。 > [[=A=]]ってAやÄなどにマッチするんだっけ? 建前としてはそうなるはずだけど誰も実装してないとか何とか。よく知らないですが。 調べてみたら [. .] と [= =] の訳文はかなりおかしい気がしてきた。
262 : 実は訳間違ってました[[=A=]] ってかくと顔文字っぽい。
263 : POSIXって良く聞くけどなんですか?
264 : 258です。訳文とかちょっと修正しました。ページ内部のリンクも増やした。 >>263 実は私もよく知らない。
265 : 雲丹の標準規格じゃないの?
266 : http://ja.wikipedia.org/wiki/POSIX POSIX(ポジックス パーズィックス、Portable Operating System Interface)とは、 異なる実装のUNIX OSを始めとする各種OSに共通のAPIを定め、移植性の高い アプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定した アプリケーションインタフェイス規格である。
267 : motifもIEEEが規格決めてたから、こっち使いましょうよ
268 : >>263 ザックリとでよければ「UNIX互換」くらいに考えておけば良い。
269 : CodeBlocks10.05とwxWigets2.8を使用しています。 勉強中です。 http://wiki.codeblocks.org/index.php?title=WxSmith_tutorials の1-7までは実行してみました。 そんなレベルなのですが、ディレクトリ内のファイル名を一覧でcsvにだせるところまでを目標に しています。 void filenameFrame::OnButton1Click(wxCommandEvent& event) { wxString CurrentDocPath; wxString Filename; wxArrayString Filenames; wxString GetDirectory; wxFileDialog* OpenDialog = new wxFileDialog( this,wxEmptyString,wxEmptyString,wxEmptyString,wxEmptyString,wxFD_MULTIPLE,wxDefaultPosition); if (OpenDialog->ShowModal() == wxID_OK) { CurrentDocPath = OpenDialog->GetPath(); Filename << OpenDialog->GetFilename(); GetDirectory << OpenDialog->GetDirectory(); Filenames << OpenDialog->GetFilenames[0]; TextCtrl1->SetLabel(CurrentDocPath); TextCtrl2->SetLabel(Filename); TextCtrl3->SetLabel(GetDirectory); TextCtrl4->SetLabel(Filenames); } OpenDialog->Destroy();}
270 : C:\C\FILENAME\filenameMain.cpp|133|error: invalid use of member (did you forget the '&' ?)| C:\C\FILENAME\filenameMain.cpp|140|error: conversion from 'wxArrayString*' to 'const wxString' is ambiguous| C:\wxWidgets2.8\include\wx\string.h|692|note: candidates are: wxString::wxString(wxChar, size_t) <near match>| コンパイルすると、このようなメッセージが表示されます。 以下の行を削除すると、正常にコンパイルが通ります。 wxArrayString Filenames; Filenames << OpenDialog->GetFilenames[0]; wxArrayString Filenames; wxFiledialogで複数ファイルを選択した場合には、配列?を使用しないといけないような気がするので、多分wxArrayStringを使わないとだめかと 思いいれてみました。 配列?なのでGetFilenames[0]といれれば複数ファイルを選択した場合に一番最初のファイル名が入る認識でしたが間違っているようです・・・ 複数ファイルの選択と、複数のファイル名の取得方法を検索したのですが、サンプルなどを見つけることができませんでした。 どこが間違っているか教えてください。
271 : >>269 最後の行 OpenDialog->Destroy();} 中括弧が全角になってるなあ てかこれ全コードじゃないよね
272 : サンプルにある"dialogs"が参考になるんじゃないかな、 "File operations->Open files"というのがある。
273 : >>271 レスありです。全コードではありません。 改行などを削除しています。 wxSmithで作成していますので、どのようなソースが必要になりますか? プロジェクトフォルダを見ると、bin/obj/wx_pch.h.gch/wxsmithフォルダと filename.cbp/filename.depend/filename.layout/filenameApp.cpp/filenameApp.h/filenameMain.cpp/filenameMain.h/resource.rc/wx_pch.hファイルがあります。 filenameMain.cppの内容は以下のとおりです。 /*************************************************************** * Name: filenameMain.cpp * Purpose: Code for Application Frame * Author: () * Created: 2011-11-08 * Copyright: () * License: **************************************************************/ #include "wx_pch.h" #include "filenameMain.h" #include <wx/msgdlg.h> //(*InternalHeaders(filenameFrame) #include <wx/intl.h> #include <wx/string.h> //*) //helper functions enum wxbuildinfoformat { short_f, long_f }; wxString wxbuildinfo(wxbuildinfoformat format)
274 : { wxString wxbuild(wxVERSION_STRING); if (format == long_f ) { #if defined(__WXMSW__) wxbuild << _T("-Windows"); #elif defined(__UNIX__) wxbuild << _T("-Linux"); #endif #if wxUSE_UNICODE wxbuild << _T("-Unicode build"); #else wxbuild << _T("-ANSI build"); #endif // wxUSE_UNICODE } return wxbuild; } //(*IdInit(filenameFrame) const long filenameFrame::ID_BUTTON1 = wxNewId(); const long filenameFrame::ID_TEXTCTRL1 = wxNewId(); const long filenameFrame::ID_BUTTON2 = wxNewId(); const long filenameFrame::ID_TEXTCTRL2 = wxNewId(); const long filenameFrame::ID_BUTTON3 = wxNewId(); const long filenameFrame::ID_TEXTCTRL3 = wxNewId(); const long filenameFrame::ID_BUTTON4 = wxNewId(); const long filenameFrame::ID_TEXTCTRL4 = wxNewId(); const long filenameFrame::ID_PANEL1 = wxNewId(); //*)
275 : BEGIN_EVENT_TABLE(filenameFrame,wxFrame) //(*EventTable(filenameFrame) //*) END_EVENT_TABLE() filenameFrame::filenameFrame(wxWindow* parent,wxWindowID id) { //(*Initialize(filenameFrame) wxFlexGridSizer* FlexGridSizer1; Create(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("wxID_ANY")); FlexGridSizer1 = new wxFlexGridSizer(0, 3, 0, 0); Panel1 = new wxPanel(this, ID_PANEL1, wxDefaultPosition, wxSize(560,106), wxTAB_TRAVERSAL, _T("ID_PANEL1")); Button1 = new wxButton(Panel1, ID_BUTTON1, _("Label"), wxPoint(8,24), wxSize(72,24), 0, wxDefaultValidator, _T("ID_BUTTON1")); TextCtrl1 = new wxTextCtrl(Panel1, ID_TEXTCTRL1, _("Text"), wxPoint(104,24), wxSize(456,22), 0, wxDefaultValidator, _T("ID_TEXTCTRL1")); Button2 = new wxButton(Panel1, ID_BUTTON2, _("Label"), wxPoint(8,48), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON2")); TextCtrl2 = new wxTextCtrl(Panel1, ID_TEXTCTRL2, _("Text"), wxPoint(104,48), wxSize(456,22), 0, wxDefaultValidator, _T("ID_TEXTCTRL2")); Button3 = new wxButton(Panel1, ID_BUTTON3, _("Label"), wxPoint(8,72), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3")); TextCtrl3 = new wxTextCtrl(Panel1, ID_TEXTCTRL3, _("Text"), wxPoint(104,72), wxSize(456,22), 0, wxDefaultValidator, _T("ID_TEXTCTRL3")); Button4 = new wxButton(Panel1, ID_BUTTON4, _("Label"), wxPoint(8,96), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON4"));
276 : TextCtrl4 = new wxTextCtrl(Panel1, ID_TEXTCTRL4, _("Text"), wxPoint(104,96), wxSize(456,22), 0, wxDefaultValidator, _T("ID_TEXTCTRL4")); FlexGridSizer1->Add(Panel1, 1, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 0); SetSizer(FlexGridSizer1); FlexGridSizer1->Fit(this); FlexGridSizer1->SetSizeHints(this); Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&filenameFrame::OnButton1Click); //*) } filenameFrame::~filenameFrame() { //(*Destroy(filenameFrame) //*) } void filenameFrame::OnQuit(wxCommandEvent& event) { Close(); }
277 : void filenameFrame::OnAbout(wxCommandEvent& event) { wxString msg = wxbuildinfo(long_f); wxMessageBox(msg, _("Welcome to...")); } void filenameFrame::OnButton1Click(wxCommandEvent& event) { wxString CurrentDocPath; wxString Filename; wxArrayString Filenames; wxString GetDirectory; wxFileDialog* OpenDialog = new wxFileDialog( this,wxEmptyString,wxEmptyString,wxEmptyString,wxEmptyString,wxFD_MULTIPLE,wxDefaultPosition); if (OpenDialog->ShowModal() == wxID_OK) { CurrentDocPath = OpenDialog->GetPath(); Filename << OpenDialog->GetFilename(); GetDirectory << OpenDialog->GetDirectory(); //Filenames << OpenDialog->GetFilenames[0]; TextCtrl1->SetLabel(CurrentDocPath); TextCtrl2->SetLabel(Filename); TextCtrl3->SetLabel(GetDirectory); //TextCtrl4->SetLabel(Filenames); } OpenDialog->Destroy(); }
278 : 連続投稿規制 5回でなるんですねが・・・ こんな感じです。 配列・ポインタなど、マニュアルを目を通したのですが、完全に理解していません。 とりあえず色々さわりながら理解していこうかと考えています。 >>272 ありがとうです。 sampleフォルダの中のですね。 当初この中を探したのですが、wxSmithでのプロジェクトがなかったのであきらめていました。 dialogs.cppの790行目からそれらしい記載があったので参考にしてみます。 ありがとうでした。
279 : 迷惑な香具師だな
280 : >>278 長いときはcodepadとかideone使おうぜ・・
281 : 会社から帰ったら考えてみるわ>>278
282 : >>280 そのような場所があるとは知りませんでした。 次からそうします。 スレ汚しすみませんでした。 あと、/sample/dialogs/dialogs.cppの該当部分を、コピペしただけで複数ファイルの選択と、表示ができました。 意味を調べながら理解していきます。 ありがとうでした。
283 : 中学生か まあがんがれや
284 : ubuntuでwxWidgetsの勉強中なのですが、samplesフォルダ内のサンプルソース(c++)をいくつか実行してみようと思い、付属のmakefile.cpp及びmakefile.unxをmakeコマンドで実行しようとするとコンパイルに失敗します。 端末より g++ -c foo.cpp `wx-config --cppflags` という形でコンパイルしてみてもエラーが出ます。 コンパイルに失敗したサンプルソースはlistbox.cppとlisttest.cppです。 なにかコンパイル時に指定しなければいけないファイルなどがあるのでしょうか? どなたか教えてください
285 : wxをビルドしてインストした?
286 : >>284 エラーメッセージ貼ってよね!
287 : >>285 早速の返信ありがとうございます。 僕が変な勘違いをしてない限りwxはインストール済みだと思います。 >>1 のリンクにある wxWindowsで始めるC++ GUIプログラミング ttp://www.h3.dion.ne.jp/~k5_n/wxwin/ wxWidgets でクロスプラットフォーム GUIアプリを作ろう ttp://0xcc.net/pub/uu-2004-08/ に書かれている簡単なソースや、自分で作った幾つかのソースは動きますので。 >>286 返信ありがとうございます。 今すぐにエラーを貼るのは難しいので、数時間後にまた貼らせて頂きます。
288 : listtestでは、makefile.unxと手打ちのコンパイルでは同じエラーが出ました。 makefile.gccはmakeコマンド自体が失敗していたようなので、環境の違いが原因だと思います。 以下、listtestのmakefile.unxに対するエラーの一部(エラーが167行もあるため省略します。)です。 In file included from listtest.cpp:48:0: listtest.h:29:34: エラー: ISO C++ では型の無い ‘wxDECLARE_NO_COPY_CLASS’ の宣言を禁止しています [-fpermissive] listtest.h:96:39: エラー: ISO C++ では型の無い ‘wxDECLARE_NO_COPY_CLASS’ の宣言を禁止しています [-fpermissive] listtest.h:189:36: エラー: ISO C++ では型の無い ‘wxDECLARE_NO_COPY_CLASS’ の宣言を禁止しています [-fpermissive] listtest.cpp:73:19: エラー: ‘wxIntPtr’ was not declared in this scope listtest.cpp:73:35: エラー: ‘wxIntPtr’ was not declared in this scope listtest.cpp:73:51: エラー: ‘wxIntPtr’ was not declared in this scope listtest.cpp:73:78: エラー: expression list treated as compound expression in initializer [-fpermissive] listtest.cpp:74:1: エラー: expected ‘,’ or ‘;’ before ‘{’ token listtest.cpp: コンストラクタ ‘MyFrame::MyFrame(const wxChar*)’ 内: listtest.cpp:194:50: エラー: オーバーロードされた ‘wxIcon(const char* const [37])’ の呼び出しは曖昧です listtest.cpp:194:50: 備考: 候補: /usr/include/wx-2.8/wx/generic/icon.h:35:5: 備考: wxIcon::wxIcon(const wxString&, wxBitmapType, int, int) <near match> /usr/include/wx-2.8/wx/generic/icon.h:35:5: 備考: 第 1 引数を ‘const char* const [37]’ から ‘const wxString&’ へ変換する方法が不明です /usr/include/wx-2.8/wx/generic/icon.h:31:5: 備考: wxIcon::wxIcon(char**, int, int) <near match> /usr/include/wx-2.8/wx/generic/icon.h:31:5: 備考: 第 1 引数を ‘const char* const [37]’ から ‘char**’ へ変換する方法が不明です /usr/include/wx-2.8/wx/generic/icon.h:30:5: 備考: wxIcon::wxIcon(const char**, int, int) <near match>
289 : サンプルはどこから持ってきたやつなの? インストールしてるwxWidgetsとサンプルのバージョンは同じ? そもそもインストールはどうやってしたの? パッケージから入れたの? それともソースからビルドしたの? とまあ、気になる点はいろいろですが、 とりあえずパッケージからwxWidgetsの開発環境をインストールして、 同じバージョンのサンプルをコンパイルするのは、 最初に書かれてる方法で普通にできます。 ソースからビルドすれば付属してるサンプルも一緒にコンパイルしてくれるはずです。
290 : >>288 そのエラーメッセージは最初の方は含まれてる? wxのincludeが読み込めてないように思える。includeのエラーが最初にないかい?
291 : >>288 makefile.gccはMinGW用のMakefileじゃなかったっけ? make -f <対象のMakefile> でだいたい行けるはず
292 : そもそもLinuxでwxWidgetsやろうと思ったら @wxWidgetsのソースダウンロード A./configure <- 自分が欲しいオプション -> Bmake && make install Csamplesフォルダにあるソースコードを「make」コマンドでコンパイル で終わるはずなんだがなあ
293 : MinGWでwxWidgetsやろうとしたら面倒すぎて死んだ
294 : >>293 大丈夫、慣れたらできる(マゾ)
295 : >>284 しかもよく見たらコマンド間違えてるな × g++ -c foo.cpp `wx-config --cppflags` ○ g++ -c foo.cpp `wx-config --libs` `wx-config --cxxflags` -o foo ライブラリにリンクしてないから実行ファイルができてない可能性が
296 : >>293 wxDev-C++ http://wxdsgn.sourceforge.net/ みたいなのもあるから暇なときに試してみたら? VC++でやるよりは楽かも…、しれません。
297 : devC++は好きで昔から結構使ってるけど やっぱvc版インストしてvcの統合環境でやったほうがデバッグは楽だよ 使うまではdevCのパッケ導入が楽かも知れんけどw (最近はc#が色々楽すぎるんでwx自体全然使って無いけど・・・)
298 : VC++2008EnterpriseEditionでやったらめちゃくちゃ簡単だった
299 : hosyu
300 : レスの間が開いてすみません。みなさん色々とアドバイスありがとうございます。 >>289 よくわからないうちからいろいろなサイトをまわって色々試してたせいで若干記憶が曖昧で申し訳ないのですが、インストールは確かパッケージから入れたと思います。 サンプルのバージョンが2.9.2なのですが、コンパイルエラーを見る限り、2.8のライブラリを読んでいるみたいなので、安定版と最新版を両方入れてたみたいです。 改めて2.8.12を公式から落としてきて、そのサンプルでコンパイルしてみたらうまくいきましたので、ご指摘の通りサンプルとwxWidgetsのバージョンが違ったみたいです。ありがとうございました。 >>290 エラーメッセージは先頭の部分でした。ありがとうございました。 >>291 そうみたいですね。makefile.unxでうまくいきました。ありがとうございました。 >>295 今まで下記サイトを参考に http://0xcc.net/pub/uu-2004-08/ % g++ -c hello.cpp `wx-config --cppflags` % g++ -o hello hello.o `wx-config --libs` というようにコンパイルしてたんですけど良くなかったでしょうか。
301 : >>300 > 今まで下記サイトを参考に > http://0xcc.net/pub/uu-2004-08/ > > % g++ -c hello.cpp `wx-config --cppflags` > % g++ -o hello hello.o `wx-config --libs` > > というようにコンパイルしてたんですけど良くなかったでしょうか。 それならOK、コマンド1行でやるか2行でやるかの違い ただ wx-config --cppflagsとwx-config --libsが何を表しているのか includeとかlibってどういうものなのかググって意味を考えたほうがいいよ
302 : LinuxでパッケージからwxWidgetsを入れた場合、setup.hはどこにあるのでしょうか? wxUSE_ACCESSIBILITYを有効にしようと思ってファイル検索したら大量にかかったので幾つか内容を変更してみても有効にならなかったので。
303 : パッケージはバイナリしか入ってない、つまりオプションを切り替えるのは不可能では? ソースからビルドした方がいいと思われ
304 : >>303 ありがとう。ソースから入れなおしてみる。
305 : >>302 Linuxでは通常はソースのパッケージが別に用意されてるよ。 ディストリによるけど後ろに-develみたいなのがついたパッケージ を入れるとソースが入る。
306 : >>305 そのレスを見る前に入れなおしてしまった…教えてもらったのに申し訳ないです。 オプションの切り替えは結局setup.hをいじれば良いのでしょうか?
307 : >>306 ./configure -h で付けられるオプションが見れるからやってみ、その中にwxUSE_ACCESSIBILITYも入ってるだろう
308 : $ ./configure -h | grep accessibility --enable-accessibility enable accessibility support あったあった。何に使うのかわからんけどどうぞ。
309 : >>307 ,308 何から何まですみません。
310 : wxAccessibleってマニュアルに For details on the semantics of functions and types, please refer to the Microsoft Active Accessibility 1.2 documentation. とか、 Availability: only available for the wxMSW port. とかあるけどlinuxで意味あるのか?
311 : >>310 下のサイト http://www14.ocn.ne.jp/~bkclass/doc_wxsamples.html を見て、サンプルのソース実行して勉強してたんですけど、accessっていうサンプルをコンパイルして実行をしようとすると、 "This sample has to be compiled with wxUSE_ACCESSIBILITY" というメッセージが出たので、 Windowsのみ本体のwxUSE_ACCESSIBILITYを1にする、とは書いてあったんですが、動いてないということはLinuxでも必要なのかと勝手に思い込んでこちらで聞いてみたんですが、やっぱりLinuxでは意味が無いんでしょうか…
312 : 度々すみません。 こちらでもマニュアルを確認したら、accessはWindowsのみと書いてありました。 今度からはマニュアルを良く読んで、わからなかったらこちらで聞きたいと思います。 自分自身でもあんまりにゆとりすぎて反省してます…。 みなさん大変ご手数をおかけしました。
313 : ほとんどのゆとりにくらべたらまだましなほうだわ
314 : ゆとりはHSPとかC#に行くだろうからこっちには来ないだろうな あとC++のGUIライブラリで有名で日本語ドキュメントがあるのはQtとかgtkだろうからさらにやる人は減る 最後にwxWidgetsは英語の知識とC++のオブジェクト指向がわかってないとできないから挫折する人も多いだろう とゆとりが言ってみる
315 : wxWidgets > Qt >>> こえられないかべ >>> GTK
316 : wxWidgets > Qt なの?
317 : いわゆるビジュアルプログラミング言語は 生産性を改善するという触れ込みでありながら、事実上普及していない 何でかは知らんけど、同じ大きさのモニタに表示できる情報量で テキストに負けちゃうからっていう説を聞いたことがあるような
318 : |....,,__ |_::;; ~"'ヽ | //^''ヽ,,) | i⌒" | ∀`) < 誰もいない きのこるならいまのうち |⊂ | ノ _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" |( ´∀`) < きのこ のこーのこ げんきのこ ♪ |(ノ |つ | | ⊂ _ ノ ""U _,,,......,,__ /_~ ,,...:::_::;; ~"'ヽ (,, '"ヾヽ i|i //^''ヽ,,) ^ :'⌒i i⌒" (´∀` )| < エリンギ まいたけ ブナシメジ ♪ ⊂| (ノ | | | ヽ _ ⊃ .U"" | | ミ | ミ サッ! | ミ |
319 : 下記のページ http://docs.wxwidgets.org/2.8/wx_wxcommandevent.html でwxCommandEventを勉強していたのですが、 GetIntとGetSelectionの違いがよく分かりません。 GetIntは wxCommandEvent::GetInt int GetInt() Returns the integer identifier corresponding to a listbox, choice or radiobox selection (only if the event was a selection, not a deselection), or a boolean value representing the value of a checkbox. と書いてあり、GetSelectionは Returns item index for a listbox or choice selection event (not valid for a deselection). と書いてあるのですが、GetIntの選択されたリストボックスに対応付けられたInt型と言うのはGetSelectionで返される値と何か違うものなのでしょうか?
320 : ver 2.8.12 include/wx/event.h 538: int GetSelection() const { return m_commandInt; } 554: int GetInt() const { return m_commandInt; }
321 : リストボックスの中に、入れ子でリストボックスを作りたいと思いマニュアルを見て、wxListBoxのメンバ関数であるCreate関数を利用すれば2段階リストが構成できるということまではわかったのですが、Create関数の使い方がいまいちわかりません。 お手数ですが、どなたか使い方を教えていただきませんでしょうか。
322 : 了解
323 : wxRegExを使うため、wxregexライブラリをビルドし、成功しました。 しかし、いざプログラムで「wxRegEx」クラスを使おうとすると、「error C2065: 'wxRegEx' : 定義されていない識別子です」というエラーが出て、全く使えません。 思いつく方が居たらお願いします。 OS: Windows 7 wxWidgets: 2.9.1 コンパイラ: Visual C++ 2010 Express
324 : >>323 すいません、プリコンパイル済みヘッダを再作成してみたらうまくいきました。 スレ汚しすいません……
325 : MinGW勢はいないのか どいつもこいつもマイクロソフトの犬だな
326 : mingwの時点でOSはWindowsなのに >どいつもこいつもマイクロソフトの犬だな とか書くのかよw
327 : 確かにそうだな、ちょっとWindows捨ててくる
328 : wxWidgetsはWindows以外はおまけだろ。 Win32のラッパーとしての価値しかないと思っている。
329 : >>326 ナイス
330 : >>328 元々 wxWindows だからなぁ
331 : migw もなぁ…64bit対応がなぁ… wxruby とか使いたくても使えないよ しかしひとはビルドしろという なんどでもビルドしろという びるどしろー
332 : rubyるど
333 : MSWでwxListCtrlを使ってみたらDESELECTEDイベントが通知されないバグがあったので クリックやキボード操作が行われる度に選択状態を自分でチェックしてDESELECTEDイベントを送るようにしたら アイテムが1個の時に何故かマウスイベントが消し去られるバグまで出てきて もう八方塞がりです なにこれ馬鹿
334 : wxLC_VIRTUALの呪い
335 : そういうのってバグ報告できないのかな?
336 : 馬鹿が使うと馬鹿っぽく振舞います
337 : 明らかに開発陣はWindowsでテストしてないな 昔よりバグが悪化してるwww
338 : 最近wxTreeCtrl使ってるけどイベント通知できんわ 仕様がわかってないだけかも知れんが、バグだったら報告しなきゃだな
339 : できるよ
340 : 最新バージョンってバグ多いの? これから使うか悩んでるので教えてださい。
341 : 今日ちょっとwxTreeCtrlの全イベント試してみたが、特に問題なかった。環境はMSW(MinGW) >>340 英語が多くてドキュメントがAPIリファレンスしかないのがある意味バグw この前wxXMLをHTMLに使ったら一気にバグってワロタ(当たり前だけど) それさえ超えればいいものだと思います
342 : 自分の無能を環境のせいにすんなやぼけ
343 : バグとか明らかに仕様とは違う動きをしたりすることは多々あるけど もともとネイティブAPIをラップしただけだから誤魔化せるかもしれない 結局のところネイティブレベルの知識とwxWidgetsの中身まで調べないといけないので時間はかかる それでもネイティブコンパイル出来ないC#も嫌だし、MFCよりは遥かにましだけどw ネイティブレベルのことをしたくてGUIも楽に作りたいって要求に答えてくれるものがないもんな
344 : >>341 英語なのはキツイけどほかに良いライブラリも見当たらないし我慢するw >>343 バグがあるってのはちょっと残念だなぁ ネイティブレベルの知識もそんなに無いし不安だ・・・ けど、大きなバグじゃないのなら少し使ってみようと思います。
345 : 649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be: 学生プログラマ日本一決定戦(予選は社会人も参加可) ttp://codevs.jp/howto.html 現在予選開催中 応募締切 2012.1.6 12:00 おもしろいことやっているじゃん。誰か今から参加しろよ。
346 : >>340 http://www.wxwidgets.org/ wxWidgets 2.9.3 Released 2011-12-14 While this is still officially a development release because some API details are still not frozen, we believe that 2.9.3 can be used in production environment, especially for the new projects for which (small) changes in behaviour since 2.8 are not a problem. Give it a try and let us know what do you think!
347 : 2.8もバグ多い
348 : サイザーage
349 : 今年のおみくじは大吉を良く目にする
350 : 今年はwx使うことあるかなー
351 : wxWebViewって縦書きに対応してる?
352 : wxTextCtrlの内容を一行ずつ読み込みたいです。 行数を調べるのに以下のやり方でいいのかと考えたのですがエラーがでます。 size_t abc = wxTextCtrl::TextCtrl1.GetNumberOfLines(); コンパイルすると以下のエラーがでます。 C:\Users\x\Desktop\practice\practiceMain.cpp||In member function 'void practiceFrame::OnButton2Click(wxCommandEvent&)':| C:\Users\x\Desktop\practice\practiceMain.cpp|225|error: 'TextCtrl1' is not a member of 'wxTextCtrl'| http://docs.wxwidgets.org/2.9.3/classwx_text_file.html ここを見るとメンバー関数と書いているようなのですが、何か考え違いをしていると思うのですが・・ 教えてください。
353 : >>352 wxTextCtrlではなくwxTextFileとあるけように思える。 IDE使ったほうがいいんじゃない?
354 : >>353 レスありがとうございます。 リンクを間違っていました。 以下を参考にしました。 http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx381.htm#wxtextctrlgetnumberoflines IDEは、CODE::BLOCKS SVN:7550を使用しています。 試しに以下のことをやってみたのですがエラーがでました。 int abc = TextCtrl1.GetNumberOfLines(TextCtrl1); C:\Users\x\Desktop\practice\practiceMain.cpp|225|error: request for member 'GetNumberOfLines' in '((practiceFrame*)this)->practiceFrame::TextCtrl1', which is of non-class type 'wxTextCtrl*'| int abc = TextCtrl1.GetNumberOfLines(); C:\Users\x\Desktop\practice\practiceMain.cpp|225|error: request for member 'GetNumberOfLines' in '((practiceFrame*)this)->practiceFrame::TextCtrl1', which is of non-class type 'wxTextCtrl*'| wxTextCtrl1は、CODE::BLOCKSのGUIの部品を貼り付けています。
355 : >>354 全体のコード見てないからなんとも言えないが、TextCtrlはprivateとかで宣言しないと外から触れんぞ 例 Frame.h private : wxTextCtrl* m_text; Frame.cpp // メソッド内にテキストコントロール配置 m_text = new (.....); m_text->Hogehoge();
356 : >>355 レスありがとう。 int abc = TextCtrl1 -> GetNumberOfLines(); と書けば、エラーなくコンパイルできました。 本当にありがとうでした。
357 : >>356 それじゃあコンパイルできても内部処理書く段階で死にそうなのでアドバイス 第十三回-03 ドット演算子とアロー演算子 http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/13-03.html あとこことかも役に立つ ●C++編(言語解説) トップページ http://www.geocities.jp/ky_webid/cpp/language/index.html
358 : >>357 ありがとうございます。 ゆっくり読みます。
359 : テキストファイルを読み込む時に、utf-8のファイルの場合はreadして読み込むことができます。 テキストファイルがsjisの場合、次のようなエラーメッセージが表示されます。 [Faild to convert file "z:\test.txt" to unicode http://docs.wxwidgets.org/2.9.3/classwx_text_file.html http://docs.wxwidgets.org/2.9.3/classwx_conv_auto.html 上記を読むと、wxConvAuto機能を使用すると自動的にコンバートしてくれるように記載されているように見えます。 それで、openするときに、wxConvAuto()を付け加えてみたのですがエラーがでます。 wxConvAutoは付けても、付けなくても同じ現象です。 tfile.Open(file,wxConvAuto()); TextCtrl1->SetValue(str); に、utf-8のファイルを読み込むと内容が反映されます。 sjisだとオープン時に(本当にオープンするときのエラーかどうかはわかりませんが・・・)上記エラーがでます。 またTextCtrl1にはテキストファイルの内容が反映されません。 どこが悪いか教えてください。
360 : すいません、ソースコードは短めなので、こちらに書きます。 wxString file,str,s,number; wxTextFile tfile; wxFileDialog fdlog(this,_T("テキスト読み込みファイルの選択"), wxEmptyString, wxEmptyString, wxEmptyString, wxFD_OPEN); if(fdlog.ShowModal() != wxID_OK) return; { file.Clear(); file = fdlog.GetPath(); tfile.Open(file,wxConvAuto()); wxLogMessage(_T("オープンできました。")); str = tfile.GetFirstLine(); s = str; str += '\n'; while(!tfile.Eof()) { s= tfile.GetNextLine(); str += s; str += '\n'; } TextCtrl1->SetValue(str); wxLogMessage(_T("読み込み完了しました")); tfile.Close(); こんな感じです。
361 : wxTextCtrlの中身を印刷したいのですが、どのようにすればいいのかいまいち分かりません。 どこかにwxTextCtrlのアドレスか何かを渡せばよいのでしょうか?教えてください
362 : >>360 過去スレにもSJIS読み込みについての事例が沢山あるが、wxWidgetsのライブラリによるSJIS→UTF-8の変換は全く期待できない 結論としては「UnicodeビルドしてUTF-8で読み込め」でFAだとおもう おすすめはlibiconvでUTF-8に変換してからwxWidgets内に読み込む iconvはwikipediaにもサンプルコードがあるから、使うのは難しくないはず http://ja.wikipedia.org/wiki/Iconv >>361 wxWidgets2.9.3のクラスリファレンス見れ、いっぱい使えそうなのあるぞ wxPrintData wxPrintDialog wxPrintDialogData wxPrinter wxPrinterDC wxPrintout wxPrintPreview
363 : 印刷の件ですが、wxPrinterDCにwxTextCtrlの値を渡せばWindowsでは印刷することができました。 しかし、LINUX(ubuntu11.10)環境下では、印刷プレビューを見る限りではうまくいっている様に思えるのですが、実際に印刷してみると(test wordsと言う文字を1部だけ印刷しようとしました。)、 1枚目のプリントに下記のようなエラーが印刷され、その後プリンタが無限に白紙を出しつづけるという不具合が起こりました。 %!PS-Adobe-3.0 %%Creator: Gnome Print Version 2.18.8 %%CreationDate: D:201201061 この不具合は、wxWidgets2.8.12の印刷用のサンプルプログラムprintingの内容を印刷しようとしても起きてしまったので、 参考にしたサンプルその物がどこかおかしいか、こちらの印刷まわりの設定がおかしいかのどちらかだと思うので、とりあえず上記のエラーを調べてみます。 >>362 レスありがとうございます。 一応読んではいたのですが、いまいちよく分からなかったのでここに頼ってしまいました。住みません。
364 : さっきShift_JISで読み込むのは無理だと言ったがそれは嘘だ(コマンドー風に) 下みたいなテストプログラムで普通にShift_JIS読み込めてワロタ 2.9.3パない // テキストファイルの読み込み wxTextFile file(wxT("./Shift_JIS.txt")); file.Open(wxConvAuto(wxFONTENCODING_CP932)); wxString test = file.GetFirstLine(); frame->SetStatusText(test); frame->Show(true);
365 : >>362 >>364 レスありがとうございます。 試しに以下のように入力してコンパイルしてみました。 wxTextFile file(wxT("c:\\Shift_JIS.txt")); file.Open(wxConvAuto(wxFONTENCODING_CP932)); wxString test = file.GetFirstLine(); コンパイルすると、下記エラーがでます。 C:\Users\x\Desktop\practice\practiceMain.cpp|154|エラー: no matching function for call to 'wxConvAuto::wxConvAuto(wxFontEncoding)'| wxwigetsは,2.8.12を使用しています。 コンパイルが通らない原因が、わからにので2.9.3のソースをダウンロードしてコンパイルを試しています。 cドライブ直下に、MinGWとmsysというのを導入後、msys.batで端末?を起動しました。 そこで、./configure --disable-shared --enable-monolithic --enable-unicodeと行い、make make installまでは行いました。 make installした成果物?をwindowsの実行環境にどうもっていくか調べているところです。 何が悪いか手探りなので的外れなことしてるような気もするんですが、これしかできないのでとりあえず2.9.3の環境を作ってみます。
366 : >>365 やりかたは間違ってないとおもうので頑張って 今ちょっとクラスリファレンス見てたけど wxTextFileの部分で::Openで取れる引数が2.8から2.9で変わってるみたい wxWidgets 2.8 bool Open(wxMBConv& conv = wxConvUTF8) const bool Open(const wxString& strFile, wxMBConv& conv = wxConvUTF8) const wxWidgets 2.9 bool Open (const wxMBConv &conv=wxConvAuto()) const bool Open (const wxString &strFile, const wxMBConv &conv=wxConvAuto()) const OpenメソッドにwxConvAuto()をとれるのが新機能みたい。2.8にはないんだな、これが。
367 : >>366 わざわざ調べてくれてありがとうございます。 2.8にはない新機能だったんですね。 2.9.3にする励みになりました。 code::blocksで、コンパイル済みのものを入れるだけで1週間くらいかかった記憶があります。 コンパイルなど慣れないことをするので、今回も同じくらい時間かかるかもしれません。 でも2.9.3にする気にになりました。 ありがとうございました。
368 : Mingwをcドライブ直下にインストール PATHに、C:\MinGW\bin;C:\MinGW\mingw32\binを追加 c:\wxWigets-2.9.3を解凍 下記を参考にしました。 http://wiki.codeblocks.org/index.php?title=Compiling_wxWidgets_2.8.6_to_develop_Code::Blocks_%28MSW%29 オプションはcode::blocksで使用する場合のofficial supportと書いていたので下記とおりにしています。 コマンドプロンプトで下記実行 C:\Users\x>SET PATH=c:\mingw\bin;c:\mingw\mingw32\bin c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug c:\wxWidgets-2.9.3\lib\gcc_dll>copy *.dll %windir% code::blocksの設定 settings>Enviroment>Enviromet variables WSWIN=C:\wxWidgets-2.9.3 settings>Grobal Variable Editor current varibale:wx base: ${WXWIN} include: ${WXWIN}\include lib: ${WXWIN}\lib 開発環境のコンパイルが初めてで、これでいいのか不安ですが、code::blocks上のプロジェクトのコンパイルが通りました。
369 : >>366 wxTextFile gfile(wxT("c:\\Shift_JIS.txt")); gfile.Open(wxConvAuto(wxFONTENCODING_CP932)); wxString test = gfile.GetFirstLine(); tfile.Open(file,wxConvAuto(wxFONTENCODING_CP932)); 二通りのやりかたでコンパイルが正常にできました。 また、sjisのファイルを読みこむこともできました。 ありがとうございました。 助かりました!!!
370 : ubuntuでの印刷の件ですが、使っているプリンタのドライバがよくなかった様で、ドライバを変更したらうまく行きました。 現状、wxTextCtrl内の行が長すぎると用紙からはみ出てしまうので、適切なところで改ページするようにしたいと思っていますので、またもう少し考えてみます。
371 : Linuxで開発したツールを知り合いの古い環境で動くかどうかテストしたら、libc.so.6が見当たらないっていうエラーが出てくるのですが、標準Cライブラリって動的リンクするしか方法はないのでしょうか? その場合、作った実行ファイルは古い環境では動かないのかな… 一応./configure のオプションは --with-gtk --enable-std_iostreams --enable-std_string --enable-controls --disable-shared --enable-unicode --with-libjpeg=builtin --with-libpng=builtin --with-regex=builtin --with-libtiff=builtin --with-zlib=builtin --with-expat=builtin にして、プログラムのコンパイルは g++ -o hoge.cpp `wx-config --cxxflags` `wx-config --libs` g++ -o hoge.cpp `wx-config --cxxflags` `wx-config --libs` -static-libgcc -static-libstdc++ g++ -o hoge.cpp `wx-config --cxxflags` `wx-config --static --libs` の3通りで実行ファイルを作ってそれぞれ試してもらったのですが、どれもlibc.so.6が利用できないというような意味のエラーが出てきます。 また g++ -static -o hoge.cpp `wx-config --cxxflags` `wx-config --libs` についても試しましたが、コンパイルエラーが大量に(主にライブラリが見当たらないといったようなエラー)が出てきます。 解決方法があるようでしたらご教授お願いします
372 : >>371 エスパーしてみるわ 一応忠告しとくけどwxWidgetsは「同じソースコードからWin, Linux, Macで使えるバイナリがコンパイルできる」のであって 「LInuxでコンパイルしたバイナリがWindowsで使える」というわけではない。 それができるのはJavaだけ 上の問題ではないとしたら Linuxでコンパイル→Linuxで使う、はライブラリが揃ってる限りいけるはず。 よって、既に生成している実行ファイルを友人の環境で「ldd <- 対象の実行ファイル ->」して 友人の環境で足りないライブラリを追加する もしくは友人の環境でwxWidgetsのソースをコンパイルして「wx-config」が正しく使えるようにする。
373 : というかlibc.so.6が足りないだけなら 実行ファイルと同じディレクトリにlibc.so.6を置いて実行すればいける気もする
374 : >>372 レスありがとうございます。 LinuxでコンパイルしたファイルはLinuxでは使えない、というのはわかっています。私も知り合いも環境はLinuxです。 極力ユーザが煩わしくないように、実行ファイル以外のファイルをユーザが別途インストールする必要が無いようにしたいのですが、不可能なのでしょうか?下記サイト http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html によると、Javaとは違いランタイムがいらないと書いてありますが限度があるのでしょうか 一応Windows版は同じソースで私の周りの環境では問題なく動いたのですが… libc.so.6を実行ファイルと同じフォルダにおけ、ということですが、共有ライブラリはlddコマンドで見れるような指定されているアドレスに置かなくても利用可能なのでしょうか? その方法で動作するかもしれないのでまた試してみます。
375 : >>374 > LinuxでコンパイルしたファイルはLinuxでは使えない、というのはわかっています。 いやわかってないだろ、どう見ても。
376 : >>375 すみません間違いました。 LinuxでコンパイルしたファイルはLinux以外では使えない、というのはわかっています。です
377 : >>376 自分の環境でコンパイルするときに正しく-staticオプションつけとけば、依存なしにバイナリを走らせることはできるはず 依存関係が出てるってことはstaticリンクビルドされてないのは間違いないので、そのアプリをちゃんとコンパイルしなおすべきかと
378 : >>377 レスありがとうございます。 -static-libcというコマンドは存在しないみたいで、どのようにオプションをつければlibcを静的リンクすればいいのか、自分なりに調べてみたのですがよく分からないのでできれば教えていただきたいです。
379 : >>378 リンク時に「-static」とつければいいです この意味がわからなければ gcc,CXXFLAGS,LDFLAGS ,MAKEFILE、リンカとかのキーワードでググってね
380 : >>379 g++ -static -o hoge.cpp `wx-config --cxxflags` `wx-config --libs` でコンパイルしていたのですが、下記のようなエラー(長いので前半部分だけです。ごめんなさい。)が出るのですが、./configureのオプションか何かが足りないのでしょうか… /usr/bin/ld: cannot find -lgdk_pixbuf-2.0 /usr/local/lib/libwx_baseu-2.8.a(baselib_dlunix.o): In function `wxDynamicLibrary::GetProgramHandle()': dlunix.cpp:(.text+0x13): warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libgio-2.0.a(libgio_2_0_la-glocalfileinfo.o): In function `lookup_gid_name': (.text+0x1a5c): warning: Using 'getgrgid_r' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/local/lib/libwx_baseu-2.8.a(baselib_utilsunx.o): In function `wxGetUserHome(wxString const&)': utilsunx.cpp:(.text+0x14f5): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking utilsunx.cpp:(.text+0x157a): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libglib-2.0.a(gutils.o): In function `g_get_any_init_do': (.text+0xe2a): warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking /usr/lib/gcc/i686-linux-gnu/4.6.1/../../../i386-linux-gnu/libglib-2.0.a(gutils.o): In function `g_get_any_init_do': (.text+0xe40): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
381 : >>380 どこまで甘えてんだよ 少しは自分で調べてください・・・少しはソースを見やがれ まず1行目 -lgdk_pixbuf-2.0 こいつの意味は「libgdk_pixbuf-2.0.a」という名前のライブラリをリンクするという意味 調べたらGNOMEプロジェクトの1つみたいだな http://ftp.gnome.org/pub/GNOME/sources/gdk-pixbuf/ まあこいつはyumでもapt-getでもなんでもいいからインストールすればいいだろ インストール後に /usr/lib 直下に上で書いたライブラリがあればコンパイルは通るはず 2行目より後は警告だから無視してもいいのかもしれないが、意味としては 「warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking」 「警告:コンパイルに使っとるglibcがシェアードライブラリじゃねーか、スタティックライブラリでリンクしろよクソ野郎」 という感じですか、間違ってたらすまん。頑張ってgdk-pixbufとwxとglibのライブラリを手に入れてください(もちろんスタティックライブラリで)
382 : あ、でも 「warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking」系のエラーは スタティックライブラリを使っても出ることがあるみたいだな。 つーことは一番の目標はgdk-pixbufをインストールすることか。簡単じゃん。
383 : ここまでおまえの自演
384 : >>381 後から見返してみると私の状況説明がたりないため、自業自得ですが、 どこまで甘えてんだよと言われましても>>379 までの-staticオプションをつけてコンパイルする、というのは>>371 ですでにためしたと説明したつもりだったのですが、すみません。 一応こちらでもできる限りのことを調べて、ソースも読んでから書き込んだつもりですが、調べたことをかけてなかったら確かに意味がありませんね。 一応libgdk-pixbuf-2.0.0、libgdk-pixbuf-2.0.dvg はインストール済みで、wxWidgetsはもちろん入れています。glibやlibcもapt-cache searchを使って目についた関連がありそうなものをインストールしまくって、コンパイルした結果上記のエラーが出ています。 また、libc.aと言うファイルを5時間ほど探しつづけましたが見当たらず、また、下記のリンクの一番下の回答者の Check your Output mode settings, I believe you have linking set to "static". So the linker is looking for libgdk-pixbuf-2.0.a, which is probably not present. If you switch it to "shared" it should begin to work.. http://www.ultimatepp.org/forum/index.php?t=rview&goto=34857&th=6160 をみると、私の英語力ではlibgdk-pixbuf-2.0.0はstaticで出力できないと読めるため、八方塞がりとなり、ここで聞いた次第です。 気分を悪くしてしまってすみません。 >>383 自演ではないです。
385 : >>384 お前さんが知り合いの古い環境と同じ環境作って、 その環境でwxWidgetsとそのツールビルドすればええやん
386 : >>384 なんか思ったより込み入った問題みたいだな、キツイこと言ったかもしれないけど冗談だと思って聞き流してくだされ ちょっとググッたけどlibgdk-pixbuf-2.0.0のスタティックライブラリが生成できないのはバグみたいだぞ そして2番目のリンクではパッチとかも出てる http://askubuntu.com/questions/7990/what-can-i-do-about-missing-libgdk-pixbuf-2-0-la https://bugs.launchpad.net/ubuntu/+source/gtkglextmm/+bug/662572 で、対策としては gdk-pixbufのソースをとってきて ./configure --enable-static でいけるんではないかと思う(./configure -h したら一応あったけどこれは試した?)
387 : gdk-pixbuf-2.21.3にて ./configure --enable-static make make install できた。めんどくせえ。
388 : wx関係ない問題なのに面倒見いいな……
389 : 自演ですから
390 : >>385 レスありがとうございます すみません。また書き方が悪かったですね。 知り合いの環境で動かしたのは、Linuxの環境で作成したバイナリファイルを、Linuxの他の環境で動くかどうかを確かめるためでしたので、知り合いの環境だけで動いても目的を果たせないんです。 linux環境すべてで動かせるとは思ってはいないのですが、せめて、多少のバージョン違いは克服したい、と思いまして。 >>386 レスありがとうございます いえ、こちらが勝手に謝ってるだけだと思ってください。 そもそも自力で解決できないのが悪いんですし。 そしてまさかそこまで調べていただけるとは思いませんでした。 本当にありがとうございます。 パッチを試してみて、また報告します。 こちらのwxWidgetsのバージョンは2.8.12と2.9.3があるのですが、--enable-staticというオプションが確認できないので、調べてみます。 そしてちゃんと調べればきちんとパッチなども出てきたのですね… これからはもっとよく調べてから書き込むことにします。
391 : >>388 wxはgtkもラップしてますしおすし >>390 質問に答えるついででビルドしてみただけだよん
392 : >>388 ここでするべき質問ではなかったでしょうか…それ以前にちゃんと隅々まで調べておくべきでしたね >>391 --enable-staticはgdk-pixbufの方のオプションでしたね。勘違いしました。 無事に静的ライブラリでリンクすることができました。本当に有難うございました。 しかし本当に見返すとひどいですね。半年ROMって出直すことにします。
393 : 過疎ってんのかと思ったら割と繁盛してた XRCでローカライゼーション機能(wxLocale)に対応してるみたいですが、普通にXRC中に文字列書いておけば コンバートしてくれるのでしょうか? 自分で試せって?そうですね、すいません 久々に何か書いてみたかっただけです(^0^)
394 : 2.8.12をソースからコンパイルしました。 >>368 が間違っているかどうかわからないのですが、今のコンパイル環境を書きます。 CODE::BLOCKSを使用する前提なので、CODE::BLOCKSスレかと思ったのですが、 ここで質問させてもらっていたのでここに書きます。 windows 7 64bit/32bit共にmingwだと、2.8.12はコンパイルが行えなかったです。 mingwだとコンパイルできなかったので、tdm-gcc tdm-gcc-4.6.1をインストールしました。 tdm-gcc-4.6.1は、setupの時に32bitを選択しています。 ttp://forums.codeblocks.org/index.php/topic,15283.msg102557.html#msg102557 PATHにC:\MinGW32\bin;C:\MinGW32\mingw32\binを追加。 DOSプロンプトで以下を実行。(2.9.3) C:\Users\x>SET PATH=c:\mingw\bin;c:\mingw\mingw32\bin c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release CXXFLAGS="-fno-keep-inline-dllexport" c:\wxWidgets-2.9.3\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean c:\wxWidgets-2.9.3\build\msw>mingw32-make -j -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug CXXFLAGS="-fno-keep-inline-dllexport" c:\wxWidgets-2.9.3\lib\gcc_dll>copy *.dll %windir% (2.8.12) C:\Users\x>SET PATH=c:\mingw\bin;c:\mingw\mingw32\bin c:\wxWidgets-2.8.12\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean c:\wxWidgets-2.8.12\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release CXXFLAGS="-fno-keep-inline-dllexport" c:\wxWidgets-2.8.12\build\msw>mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug clean c:\wxWidgets-2.8.12\build\msw>mingw32-make -j -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=debug CXXFLAGS="-fno-keep-inline-dllexport" c:\wxWidgets-2.8.12\lib\gcc_dll>copy *.dll %windir%
395 : 何が間違っているのか教えてください。 wxWigets2.9.3を使用しています。 http://docs.wxwidgets.org/trunk/group__group__funcmacro__file.html#ga599c484cd4deea8fed7275a9a7e0a11c ここを参考にしました。 wxRenameFile(_T("z:\\test.txt"),_T("z:\\test2.txt")); コンパイル後、実行すると Failed to copy the file 'z:\test.txt' to 'z:\test2.txt' (error 2: 指定されたファイルが見つかりません。と表示されます。 zドライブ上には、test.txtファイルはあります。 試しに、下記を試すと実行できました。 wxMkdir(_T("Z:\\T")); wxMkdir(_T("Z:\\T")); と実行すると、ディレクトリの作成と削除はできました。 2.9.3が開発版だからなにか問題があるかと思い、2.8.12を入れてみたのですが同じ現象です。 多分書き方が悪いんだと思うのですが、どこがわるいのかわかりません。 教えてください。
396 : 馬鹿には無理
397 : >>395 テキストファイルが読み取り専用になってたりしない?
398 : >>397 レスありがとうございます。 読み込み専用ではなかったのですが、windowsの拡張子を表示する設定にしていませんでした。 拡張子を表示する設定にしたところ、test.txt.txtになっていました。 すみません、初歩的な事を数日見逃していました。 レスありがとうございました。
399 : わろす
400 : なんか若い子がいっぱい来た感じ >>396 これはスクリプトなのかしら
401 : >>394 エラーログを貼らないとどんなハッカーでも原因はわからんですよ^^; そもそもCode::Blocksはビルドする必要ないような?初心者はバイナリバージョンをダウンロードすればいいと思うよ。 もしCode::Blocksの翻訳とかやってる方だったら全力支援しますが
402 : ごめん>>401 は忘れてください。ただの報告だったんですね・・・ またエラーかと思った
403 : わろす
404 : wxWidgets2.9.3を使用しています。 下記リンクを参考にしました。 http://docs.wxwidgets.org/trunk/classwx_string.html#a55b90a900c24e9555760265170dc051c 文字列の中に特定の文字が複数回出た場合の検索を行いたいです。 .find()この中に、aとか、txtとか入れると、最初の桁数だけ検索できます。 たとえば、[t]と入力すると、文字列の中に4回でてきますが、一個目のものしか検索されません。 また、[猫]や[犬]などを入力すると、ループの処理に入らずすぐに終了します。 [あ] を入力すると、1回ループ処理に入っているますが、検索結果に0が帰ってきます。 コードは以下のようになっています。 //wxString gpath C:\Users\x\Desktop\practice\猫犬象aAbB猫猫猫犬犬あいう.txt wxString bb,cc,dd; size_t pos=0; if((pos=::gpath.find(("猫"),pos))!= wxString::npos) { wxMessageBox(_T("ループ 処理開始")); pos = ::gpath.find("猫",pos); cc.Printf(_T("%d"),pos); dd += cc; dd += "\n"; pos + 1; wxMessageBox(_T("ループ 判定処理に戻る")); } readpos -> SetValue(dd); wxMessageBox(_T("終了")); 文法?など、何が間違っているか教えてください。
405 : >>404 wxString gpath = L"C:\\Users\\x\\Desktop\\practice\\猫犬象aAbB猫猫猫犬犬あいう.txt"; wxString word = L"猫"; wxString result; size_t pos = 0; wxMessageBox(_T("ループ 処理開始")); while ((pos = gpath.find(word, pos)) != wxString::npos) { result += wxString::Format(L"%d\n", pos); pos += word.size(); wxMessageBox(_T("ループ 判定処理に戻る")); } OutputDebugStringW(result.c_str()); pos + 1はpos += 1のタイポだと好意的に解釈するにせよ、それでも 「何故1なのか」が理解できてないのはちょっとまずい。 ifとwhileの区別が付いてないのもかなり厳しい。 charとwchar_tの違いについてとか、 1. (pos = gpath.find(word, pos)) != wxString::npos 2. pos = gpath.find(word, pos) != wxString::npos は全く意味が違う、とか。 wxWidgets以前に、まず基本的な文法を押さえることから始めた方がいいと思う。
406 : >>404 レスありがとうございます。 >>ifとwhileの区別が付いてないのもかなり厳しい。 理由がわからないので、whileとifを書き直してテストしてました。 これは、コピペを修正するのを忘れていました。 ただ、最初はforで試したのですが、まったくだめでwhileやifなどを試してみました。 ただ理解してないのは間違いないです。 >>pos + 1はpos += 1のタイポだと好意的に解釈するにせよ 検索後、ひとつ右の文字から再度検索したかったので +1 にしたのでタイプミスではありませんでした。 +=でないとだめとのことなので、考え方が間違っているのですね。 見直します。 >>charとwchar_tの違いについてとか、 charがabとか半角文字で、wcar_tが2バイト文字が許されると漠然と認識しています。 ユニコードビルドなので、wxStringを使用した場合すべて2バイト文字が許されると認識していましたが、 なんか違うようですね。 wxString word = L"猫”; wxString::Format など、知らないものがでてきたので、これも調べます。 ありがとうございました。
407 : VCでもmingwでも pos + 1; に対してはWarning出すから、 ちゃんとWarningは読んで意味を理解しよう。 VC使ってるならステップ実行も使おう。 >charがabとか半角文字で、wcar_tが2バイト文字が許される L""を知らなかった、ということはたぶん間違った理解をしてる。 まずはstring, wstringを使って両者についての理解を深めた方が良いかも。 ちなみにVCとmingwでwchar_tの定義は異なるので、それに気付かず両者を混同して テストすると理解が深まるどころか発狂しそうになるので要注意。 知らないことが出てきたらまず自分で調べる、というのは正しい姿勢だし、 これからも是非継続してもらいたいけれども、この辺はもう完全にスレチなので、 c++初心者スレとかで聞いた方がいいと思う。 まあ頑張ってくれ。
408 : TDM-GCC 32bit wxWidgets2.9.3を使用しています。 http://docs.wxwidgets.org/2.9.3/classwx_reg_ex.html を参考にしました。 http://2ch.ac.la/read.php/tech/1268979408/955 を参考にしました。 wxRegExの機能を使用したいです。 [ももも]猫[]け[2.5]犬象()aA b B(2012年01月24日)猫猫__@(H23)_猫(わんわん)犬犬あいう.txt という文字列から正規表現で文字を検索の仕方を調べています。 試しに\[...\]と正規表現をいれて実行したところ[ももも]というのは検索できました。 もうひとつ[2.5]というのも検索されているはずかなと思うのですが、とうやればいいかがよくわかりません。 以下のコードで、\[...\]で[ももも]は検索できました。 wxString search (L"\[...\]") wxString text; (L"[ももも]猫[]け[2.5]犬象()aA b B(2012年01月24日)猫猫__@(H23)_猫(わんわん)犬犬あいう.txt" wxRegEx cktext(search); wxString result; if(cktext.Compile(search,wxRE_EXTENDED) == TRUE) if( cktext.Matches(text,wxRE_NOTBOL)) result += cktext.GetMatch(text,count); で、2件以上ヒットする場合はループにする必要があるかと次のようにしてみました。
409 : if(cktext.Compile(search,wxRE_EXTENDED) == TRUE) { wxMessageBox(L"正規表現です。"); if( cktext.Matches(text,wxRE_NOTBOL)) { wxMessageBox(L"マッチ処理に入りました"); count = cktext.GetMatchCount(); wxMessageBox(wxString::Format("%d",count)); for (size_t i=0 ; i < count ; count--) { wxMessageBox(L"マッチループ処理に入りました"); result += cktext.GetMatch(text,count); wxMessageBox(L"いったんすとっぷ1"); results -> SetValue(result); wxMessageBox(L"いったんすとっぷ2"); } results -> SetValue(result); } else { wxMessageBox(L"マッチ処理にヒットしませんでした。"); } } else { wxMessageBox(L"正規表現ではありません。"); } 実行しますと、「マッチループ処理に入りました」メッセージの後に、 faild in GetMatch() invalid match indexと表示されます。 wxMessageBox(wxString::Format("%d",count)); ここで1が帰ってくるのですくなくとも1件はヒットしていると思うのですが・・・・ 考え方や、ソースのどこが間違っているのか教えてください。
410 : >>409 詰まったら詰まった現象を再現できる可能な限り短いコードを晒してくれ。 バグってる長いコードなんて誰も読みたくはない。 一応ヒントになりそうなコードは書いたが、 今回も残念ながらwxWidgets以前の問題だ。 正規表現に関してちゃんと勉強してくれ。 wxString regexText(L"\\[...\\](.)"); wxString text(L"[ももも]猫[]け[2.5]"); wxRegEx rx; rx.Compile(regexText, wxRE_EXTENDED); if (rx.Matches(text, wxRE_NOTBOL)) { int n = rx.GetMatchCount(); for (int i = 0; i < n; ++i) { wxMessageBox(rx.GetMatch(text, i)); } }
411 : >>410 レスありがとうございます。 >詰まったら詰まった現象を再現できる可能な限り短いコードを晒してくれ。 >バグってる長いコードなんて誰も読みたくはない。 次からそのように心がけます。 >今回も残念ながらwxWidgets以前の問題だ。 >正規表現に関してちゃんと勉強してくれ。 もう一度、正規表現のコンテンツを読みます。 コードを書いてくれてありがとうございます。 参考にします。 しばらく時間がかかりそうですが、うまくいきましたら報告にきます。 ありがとうございました。
412 : >>409 > for (size_t i=0 ; i < count ; count--) count-- っておま
413 : >>412 --ってあまりよくないようなので、i++に変更しました。 wxString regexText(L".?"); wxString text(L"abc123"); wxRegEx rx; rx.Compile(regexText,wxRE_ADVANCED); if (rx.IsValid()==TRUE) { if (rx.Matches(text)) { int n = rx.GetMatchCount(); for (int i = 0; i < n; ++i) { wxMessageBox(rx.GetMatch(text, i)); }}} 上記コードでコンパイルしたところ、faild in GetMatch() invalid match indexというのはでなくなりました。 ((count--)と実行していた行で、エラーが発生していました。) 最短一致 .?を期待しています。 このソースだとaだけが表示されて、forを抜けてしまいます。 .?なので、全ての文字の1文字か0文字で、一文字が検索されると認識しています。 私の認識では、6回メッセージが表示されると思っているのですが、この考えは間違っているのでしょうか? a,b,c,1,2,3と 一文字ずつメッセージが表示されると思っているのですが・・・ それとも正規表現の場合、一つの文字列から検索する場合には一回のみしか検索しないのでしょうか? ただ、GetMatchCountでヒットした回数と内容を覚えているような気もします・・・ 正規表現もこれであっているかの自信もないのですが、どこに間違えがありますか? 教えてください。
414 : >正規表現の場合、一つの文字列から検索する場合には一回のみしか検索しないのでしょうか? その通り。 むしろ前回の状態を記憶するとどうして思ったのかがよくわからない。 >GetMatchCountでヒットした回数と内容を覚えているような気もします 覚えてない。 1が返ってきたなら「この正規表現にマッチした集合は1つ」という意味しかない。 >正規表現もこれであっているか あってる。
415 : >>414 レスありがとうございます。 >むしろ前回の状態を記憶するとどうして思ったのかがよくわからない。 http://www.adras.com/RegEx.t11993-147-1.html このようなページを時々見かけまして、一回の検索で、reEmail.GetMatch(email, 1);のように複数 書いているので、見つかったものは全部読めると思っていました。 >覚えてない。 >1が返ってきたなら「この正規表現にマッチした集合は1つ」という意味しかない。 なるほど、一つしか見つかっていないのですね。 >あってる。 了解です。 疑問なのですが、"(raw)(H24.2.4)北海道で撮影しました。" という文字列を正規表現で検索した場合に、"北海道で撮影しました。"という文字列に 変換したい場合には、wxRegExを使用する場合には、以下の流れになるのでしょうか? 1・ \(.*?\)で、上記文章を最短一致で検索 2・ (raw)が検索にかかるので、これを削除。 3・ 削除後の文字列"(H24.2.4)北海道で撮影しました。"を新規で、wxStringに格納。 4・ \(.*?\)で再度最短一で検索。 5・ (H24.2.4)が検索にかかるので、これを削除。 6・ 削除後の文字列"北海道で撮影しました。"を新規で、wxStringに格納。 wxRegExで最短一致で検索した場合に複数一致する場合があった場合。 マッチした部分の削除・置き換えを行いたい場合はこのような流れにするしかないのでしょうか? 教えてください。
416 : スレ違い
417 : >正規表現 スレチだから詳しく書く気はない。 "北.+で.+た" 文字コードの問題はあるが、この正規表現は "北海道で撮影しました"にも"北陸で撮影しました"にもマッチする。で、 "(北.+)で.+た" とすると、全体がマッチした上で、北で始まり「で」で終わる文字列が 部分集合としてキャプチャされる。 >wxRegExのお話 GetMatchでindexを指定すると、0番目にマッチした全体が入り、 1番目以降はこの部分集合が順に入る。 例だとGetMatch(text, 1)で「北陸」か「北海道」が返ってくる。 たぶんその辺を理解してないんだろうなぁと思ったので 410で "\\[...\\](.)" ってわざわざキャプチャ入れたサンプルにしたのに・・・ >()で囲まれた部分を消去したい wxString text(L"(raw)(H24.2.4)北海道で撮影しました。"); wxRegEx rx(L"\\(.*?\\)", wxRE_ADVANCED); rx.ReplaceAll(&text, L""); wxMessageBox(text);
418 : >>416 417 >スレチだから詳しく書く気はない。 すいません。 >とすると、全体がマッチした上で、北で始まり「で」で終わる文字列が >部分集合としてキャプチャされる。 キャプチャという用語を知りませんでした。 正規表現に関して、コンテンツよんでいたつもりのようでした。 で、gogleで調べたところたくさん記載しているサイトがありました。 >たぶんその辺を理解してないんだろうなぁと思ったので >410で "\\[...\\](.)" ってわざわざキャプチャ入れたサンプルにしたのに・・・ 一度だけ、その正規表現で検索したときに、マッチカウント2回表示されました。 で、エラーもでなくなったので、コードが正常なのでそういう風になっているのかと 軽く考えていました。 本来は自分で考えることだと思いますが、消去したいコードを書いてくれてありがとうございます。 正規表現の書き方を完全に理解しないとやりたいことができませんので、一旦正規表現をしばらく調べます。 キャプチャ・・・かなりすっきりしました。 本当にありがとうございました。
419 : 最新の2.8を使ってるが勝手にメモリリークしていくな しかもデバッグDLLがコンパイルすら出来ないからテスト出来ないし 中身を作り替えたとか言ってたがものすごい劣化してるな
420 : GlassFishの質問てここでいいのかな。
421 : no
422 : >>246 >なんでいつも質問した後は簡単に見つかるんだろう… 安心しろ それはRubber Duckingと言って有名なテクニックだ http://www.aoky.net/articles/john_graham_cumming/talking_to_porgy.htm
423 : wxPythonで使える俺俺モジュールの作り方を教えてくだされ
424 : サイザーage
425 : コ
426 : hoshu
427 : wxFormBuilderで出力したコードで日本語が文字化けすると思ったら BOMなしUTF8とVSの問題だった
428 : Windows, Linux環境で使えるアプリを作っているのだが Windowsの場合はバイナリを配布すればいい Linuxの場合はソース互換だからソースを配布するべきなんだよな?
429 : あとwx2.9をFedora15 x86_64でビルドしてインストールしたんだが なぜか実行時にwxCSConvでコケる。同じ症状の方おまへんか〜? この現象はwx2.8では起きてない。 (gdb) backtrace #0 0x000000000079c785 in wxCSConv::DoCreate() const () #1 0x000000000079d7bd in wxCSConv::wxCSConv(wxFontEncoding) () #2 0x000000000079dacd in wxGet_wxConvLocalPtr() () #3 0x00007ffff3a79018 in _GLOBAL__sub_I_strconv.cpp () from /usr/local/lib/libwx_baseu-2.9.so.3 #4 0x0000003c4400e2b6 in call_init.part.0 () from /lib64/ld-linux-x86-64.so.2 #5 0x0000003c4400e393 in _dl_init_internal () from /lib64/ld-linux-x86-64.so.2 #6 0x0000003c440016ca in _dl_start_user () from /lib64/ld-linux-x86-64.so.2 #7 0x0000000000000001 in ?? () #8 0x00007fffffffe815 in ?? () #9 0x0000000000000000 in ?? ()
430 : EVT_CLOSE に対して Close(True) しても終了出来ません
431 : http://cametan-001.tumblr.com/post/5864304659/wxpython
432 : ほす ttp://www.youtube.com/watch?v=8v52QIP4L9Y
433 : http://mikunchu.wiki.fc2.com/wiki/%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E3%83%98%E3%83%AB%E3%83%91%EF%BC%86%E4%B8%80%E6%8B%AC%E5%B0%8E%E5%85%A5%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88
434 : wxWidgetsでShift_JISからUTF-8変換 ttp://nantonaku-shiawase.hatenablog.com/entry/2012/05/16/031005 wxNotebookとwxAuiNotebookの違い ttp://nantonaku-shiawase.hatenablog.com/entry/20120211/1328967345
435 : >>430 EVT_CLOSEのハンドラの処理では終了処理した後event.Skip(false); Closeを呼ぶとまたハンドラが呼ばれる
436 : http://wxpython.org/docs/api/wx.CloseEvent-class.html You should check whether the application is forcing the deletion of the window using CanVeto(). If it returns False, you must destroy the window using wx.Window.Destroy. If the return value is True, it is up to you whether you respond by destroying the window or not. For example you may wish to display a message dialog prompting to save files or to cancel the close.
437 : ソースに const char sjis[3] = {0x88, 0xa2, 0x00}; wxString s(sjis, wxCSConv(wxT("CP932"))); cout << s.mb_str(wxConvUTF8) << endl; という部分があるとリンク時に下のようなエラーになります。 "hoge.sln" (Rebuild target) (1) -> (hoge:Rebuild target) -> hoge.obj : error LNK2001: 外部シンボル ""class wxMBConvUTF8 & wxConvUTF8" ( ?wxConvUTF8@@3AAVwxMBConvUTF8@@A)" は未解決です。 hoge.obj : error LNK2001: 外部シンボル ""public: static unsigned int const wxStringBase::npos" (?npos@wxStringBase@@2IB)" は未解決です。 ..\hoge.exe : fatal error LNK1120: 外部参照 2 が未解決です。 何が足りないのでしょう?
438 : ヘッダファイルの読み込みかライブラリのリンクを行ってない VC++なんて捨ててMinGWでやろうぜ! MinGW + EclipseCDTで環境用意すればいい
439 : どのライブラリが足りないのか判らないんで どのライブラリに含まれているかを教えろ
440 : >103- ttp://diary.imou.to/~AoiMoe/2004.09/middle.html#2004.09.13
441 : c++とwxWidgetsを勉強中です。 わからないことがあるので教えていただけませんか。 void functestFrame::OnButton2Click(wxCommandEvent& event) { wxString str1 = L"まっぎょ"; functestFrame::wxStringfunc(&str1); } void functestFrame::wxStringfunc(wxString* str) { wxMessageBox(*str);} 4-10はコンパイルと実行できました。 void functestFrame::OnButton3Click(wxCommandEvent& event) { wxArrayString temp1; temp1.Add(wxT("ぽけもん")); functestFrame::wxArrayStringfunc(&temp1); } void functestFrame::wxArrayStringfunc(wxArrayString *arraystring) { for (int i=0 ; i< *arraystring.GetCount() ; i++) {*arraystring.Item(i);} } コンパイルエラーがでます。 C:\Users\x\Desktop\functest\functestMain.cpp||In member function 'void functestFrame::wxArrayStringfunc(wxArrayString*)':| C:\Users\x\Desktop\functest\functestMain.cpp|169|error: request for member 'GetCount' in 'arraystring', which is of non-class type 'wxArrayString*'| C:\Users\x\Desktop\functest\functestMain.cpp|170|error: request for member 'Item' in 'arraystring', which is of non-class type 'wxArrayString*'| ||=== Build finished: 2 errors, 0 warnings (0 minutes, 1 seconds) ===| wxstringと同じ方法をしているつもりなのですが、どのようにすればコンパイルができるのでしょうか?
442 : >>441 ちょっとしたコードを書いてみた http://pastebin.com/KCE8eyDe コンパイルが通らない原因 wxArrayStringの通常変数とポインタ変数の違いがわかっていない C++では実体に対しては「.」でアクセス、ポインタ変数に対しては「->」アロー演算子でアクセスする 参考:http://brain.cc.kogakuin.ac.jp/~kanamaru/lecture/prog1/13-03.html × 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 : あと細かいことを言うと文字列の宣言を以下のようにしているようだが wxString str1 = L"まっぎょ"; せっかく用意されているので「wxT」マクロを使った方がいい wxString str1 = wxT("まっぎょ"); これでどのような環境でも日本語が変数に入れられるはず
444 : >>442 ありがとうございます。 サンプルをコンパイルして、実行できました。 通常変数と、ポインタ変数ですか。 リンク先を読んで理解します。 すみません、あと一点教えてください。 wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか? 下記マニュアルをどのように調べればよいのでしょうか? http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx368.htm http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx32.htm
445 : >>444 >wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか? C/C++ではクラスや変数の宣言時に実体を宣言するかポインタで宣言するか決められるので その質問はそもそもちょっとポイントがずれている 【ポインタ】 例えば wxButton *btn1 = new wxButton(panel, wxID_BUTTON1, wxT("ボタン1")); はwxButtonクラスをポインタ変数で宣言している *btn1内のクラスメソッドをいじるには「*btn1->GetLabel();」と書く必要がありますよ、と 普通は大きなクラスはポインタ変数でインスタンスを作って宣言したほうが良い 【実体】 wxString myTestStr; myTestStr = wxT("テスト文字列"); myTestStr.IsEmpty(); ← 空文字であるかどうか調べてる >下記マニュアルをどのように調べればよいのでしょうか? もうお気づきかもしれないが http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx368.htm に載っているのは wxStringという「クラス」についてのリファレンス wxString::Hogehoge のように「::」がくっついた後半部分がそのクラスが使用出来るメソッド(関数) myTestStr.IsEmpty(); ← wxStringのIsEmptyというメソッドをつかっている 自分が欲しい機能をクラスリファレンスで探し、クラスを宣言してどのように使えるかは メソッド部分を見れば良いということ。
446 : DLLよりもstaticの方が配布サイズ小さくなるな
447 : 逆でわ?
448 : DLLリンクで作るともちろんexeは小さくなるけど DLLも一緒に配布するとなるとでかくなるって意味
449 : そりゃあんたのプログラムの規模が小さいだけでわ?
450 : いや先入観無しで聞いてくれ 最初はそう思ってたんだが 確かにDLLリンクで作るとexeはめっちゃ小さい しかし実際そこそこの規模のプログラム書いて staticで作ってみて出来たexeが (前者のexeに必要なDLLを合わせたサイズに比べると) 意外と小さい
451 : exe だけ配布汁!
452 : そりゃDLLはwxWidgets全部入りだしな
453 : 規模によるとしか言いようがない
454 : MFC 最強ですねわかります
455 : DLLはwxWidgetsのシンボル全部入ってるけど、 staticリンクだと本体が使うシンボルだけ.aから 引っ張ってくるんだから、そうなるのは当たり前
456 : 規模によるとしか言いようがない
457 : DLL ってなんのためにあるんだっけ?
458 : ワロタ
459 : wxWidgetsで作ったexeが一個(あるいは少数)しかないときはそうなるのは当たり前。 DLLのメリットが生きるのはOS等のようにexeが無数にあってさらに共通部分(API)が多い場合。 趣味でやってるならSTATICでいいんじゃね?
460 : めずらしくwxWidgetsスレが伸びている・・・
461 : 規模によるとしか言いようがない
462 : 2.9.4 出たからな
463 : 2.9.4 はまだ Development だよね。 いつ Stable になるんだよ、まったく。
464 : 馬鹿には無理
465 : 馬鹿には無理さんは帰って、どうぞ
466 : 事故解決しました。 リンカ設定ではディレクトリで vc_dll の方を指定していたのですが、 PreprocessorDefinitions に WXUSINGDLL が抜けていたため、 static link しようとしてシンボル未解決になっていたようです。
467 : つ ttp://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide#Project_properties
468 : そうそう。 それです。
469 : >>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 : 全然違うw C++の初心者用入門本読んで勉強汁
471 : wxWCharBuffer の使い方が良く判りません。
472 : 過疎
473 : 過疎かあヌ
474 : わからないことがあるので、教えてください。 http://fossies.org/unix/misc/wxWidgets-2.9.4.tar.gz:a/wxWidgets-2.9.4/utils/helpview/src/client.cpp のソースの中で、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 : すいません、リンク先の内容が質問したい内容と同じではありませんでした。 実際は、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 : >>475 MyFrameは多分継承したクラスなので、基底クラスであるwxFrameのコンストラクタを呼び出している。
477 : あげちゃった・・・。Orz
478 : >>476 教えてくれてありがとうございます。 継承と基底クラスを調べてみます。
479 : 若き日のヴィドゲンシュタインがよみがえったように
480 : 連結グラフ G=(V,E) と重み d:E->R+が与えられたとき 最小木を求めよ。
481 : 演算子?ではありませぬ
482 : 初期化リストじゃね?
483 : wxStaticBitmapに透過png画像を指定して描画しても、 透過になってくれてないようなのですが、 単にwx.BITMAP_TYPE_PNGで読んだものを貼るだけじゃ駄目なんでしょうか?
484 : wxInitAllImageHandlers() の呼び忘れや png を作成したソフトが原因で正常に透過処理されないとかかなあ サンプルのimage参考にするといいと思うよ
485 : wxPython in action の翻訳版が・・・ http://www.slideshare.net/ryanvan/wxpython-in-action
486 : スライド565ページって、出版じゃないのかー。 それでも俺は原書を選ぶぜ。
487 : webはスライドだけど savefileボタン押したら 普通にPDFが落ちて来た
488 : ・wxAuiPaneInfoで、一度設定したCaptionをCaptionVisibleのtrue, falseで切り替えたいけど なぜか反映されん、なんでだぜ wx 2.9.4使ってみた ・GTK環境 wx2.8でSetSizer呼んだ後Fit呼ぶと異常終了するバグが2.9.4では直ってた ・同じくGTK環境 wxListctrlでwxLIST_AUTOSIZEしても、自動でカラムの幅が調整されない (なんかメーリス見たらwxPythonのロビンさんが「まだ直ってないの?」みたいなこと書いてた。誰か直して。)
489 : GTKは糞
490 : GTK+ は多段タブも実現できんのだな WindowsにできてGTKにできんことが結構見えてきた ミゲルさんもこんなこと書いてるし、Linuxのデスクトップはダメだな http://www.yamdas.org/column/technique/linuxdesktopj.html
491 : >>489 またおまえか 巣に帰れ
492 : 何度でも言うよ 欠かさず言うよ GTKは糞
493 : >>492 おっさんなにやってん?
494 : eNprdGhEhnH6XMi8RgcFfQj71L1t6+FS Cvr6jXc0G/c3BgLhfriwvl5No4NejUJz LpIZQVwwPY0OQOkaBSBnDlRujgKYC4ZQ ZfoKYGVzkkEcDYX4xjnxmo0OzXUKU/L6 1jadbDo7bfP0uVwwA8FqG4MgjH01YAMa A7kgNND1LQtgroC6Kb4xDiyr1BiAAjP1 9JpzFQBRXmeP
495 : 大量削除の危機を生き延びたんだな
496 :2012/11/01 ┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ R!R! └─┘
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▲
プログラム板 自治スレッド Part5 (782)
スレ立てるまでもない質問はここで 121匹目 (1001)
国産オープンソースDIコンテナSeasar2 その16 (497)
C++11が動的言語よりも開発効率が良くなってる… (222)
C言語なら俺に聞け(入門編)Part 109 (392)
Visual Studio 2008 Part 21 (721)
--log9.info------------------
〜ファミコンのドラゴンボールシリーズを語ろう〜2 (676)
ダンジョンマスター Lv.28 (904)
XEVIOUSを懐かしむエリア15 (310)
天外魔境シリーズを語ります! 第三十六段 (457)
魔神転生を語るスレ 〜STAGE10〜 (377)
【禿】秋葉原のレトロゲームショップ2【禿】 (616)
幻獣旅団スレ 6 (519)
半熟英雄〜冬は雪合戦だ!ういなっつぉの季節だ!〜 (424)
(英伝)英雄伝説W朱紅い雫(PC98) 2 (767)
難しいゲームを語るスレ (474)
ゲームのBGMに歌詞を付けてみるスレ 5番 (837)
昭和生まれのゲーマーは哀れだな (378)
テイルズ オブ ファンタジア その14 (379)
魔装機神LOE〜第22章 メモリアル・ディ (209)
【八武衆】バトルコマンダー【修羅の兵法】第6章 (475)
プリンスオブペルシャ prince of persia - Level 2 (672)
--log55.com------------------
【落武者】 高木脩平16 【チンゲソバ】
金蔵、どこ吹く風山葉ケイトは今日も壁打ち】276
【中卒党首】日本国民党21【鈴木信行】 ID無し
【クソBBA】チームゲロpart9【虚言癖源蔵】
金蔵、どこ吹く風【一原ミナは今日も壁打ち】277
ゴー宣道場 181
ゴー宣道場 182
ゴー宣道場 183