トップページ⇒tech
316コメント114KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん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/
0002デフォルトの名無しさん2010/04/09(金) 15:13:33
>>1
乙
0003デフォルトの名無しさん2010/04/09(金) 16:33:22
早すぎね?
0004デフォルトの名無しさん2010/04/09(金) 19:39:56
関連スレ

【RAD統合環境】 Qt 総合スレ 7 【Win/Mac/Linux】
http://pc12.2ch.net/test/read.cgi/tech/1270309416/
0005デフォルトの名無しさん2010/04/09(金) 19:46:45
早すぎだろ
0006デフォルトの名無しさん2010/04/09(金) 19:47:35
>>1
乙
0007デフォルトの名無しさん2010/04/09(金) 19:48:52
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
0008デフォルトの名無しさん2010/04/09(金) 19:52:37
━━━━━━━━〓〓〓〓〓〓〓〓 アイちゃんキター 〓〓〓〓〓〓〓〓━━━━━━━━

とりあえず>>1乙
0009デフォルトの名無しさん2010/04/09(金) 22:06:50
>>1乙
0010デフォルトの名無しさん2010/04/09(金) 22:36:04
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
0011デフォルトの名無しさん2010/04/09(金) 22:38:54
    ヘ⌒ヽフ
   ( ・ω・) �d�d
   / ~つと)
0012デフォルトの名無しさん2010/04/10(土) 01:23:32
この早漏め
0013デフォルトの名無しさん2010/04/10(土) 11:40:00
.Netスタイルのメニュー表示できないの?

http://www.dotup.org/uploda/www.dotup.org798064.gif
左:.Net 右:wx
0014デフォルトの名無しさん2010/04/10(土) 13:16:01
>>13
無理なような希ガス。自作するしかないような…(ツールバーならwxAuiでそれらしく見せれるけど)
0015デフォルトの名無しさん2010/04/14(水) 16:37:31
    ヘ⌒ヽフ
   ( ・ω・) �d�d
   / ~つと)
0016デフォルトの名無しさん2010/04/24(土) 09:25:04
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
0017デフォルトの名無しさん2010/04/26(月) 14:59:40
    ヘ⌒ヽフ
   ( ・ω・) �d�d
   / ~つと)
0018デフォルトの名無しさん2010/05/02(日) 20:44:44
    ヘ⌒ヽフ
   ( ・ω・) �d�d
   / ~つと)
0019デフォルトの名無しさん2010/05/02(日) 21:09:14
クライアント領域だけ透過させることって出来ないか?
0020デフォルトの名無しさん2010/05/03(月) 11:45:01
出来る
0021デフォルトの名無しさん2010/05/09(日) 16:02:55
こういう画像表示を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を表示する感じになるのでしょうか?
0022デフォルトの名無しさん2010/05/10(月) 00:17:11
可能
0023デフォルトの名無しさん2010/05/10(月) 01:27:50
>>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()

と書き換えて実行してみ
0024デフォルトの名無しさん2010/05/10(月) 03:30:29
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();
0025デフォルトの名無しさん2010/05/10(月) 06:23:29
答えは前スレにて
0026デフォルトの名無しさん2010/05/10(月) 16:42:05
>>25
前スレのどこ?アンカおねがい

とりあえずOnRunをコメントアウトしたら上手く動いているようではあるけど
もっときれいにやれてた気がするんだよなぁ
0027デフォルトの名無しさん2010/05/12(水) 00:56:04
>>23
ありがとうございます!
やってみたらframeが複数表示できました。
件のサンプルを参考にして勉強したいと思います。
0028デフォルトの名無しさん2010/05/17(月) 04:01:10
>>24
wx.netに入ってるwx-c.dllを使う
0029デフォルトの名無しさん2010/06/07(月) 13:24:17
wxWidetsをlinuxでコンパイルしてdemoやsamplesが正常に動くことを確認.

しかし
そのlinuxにOSXからssh-Xとかssh -Yとかで接続して,
sapmeles/openglのcubeとかisosurfとかpenguinを実行すると
ウインドウは出てくるけどopenglの描画がされないんだけど仕様なの?

ssh越しでもdemo(lifeとか)やopenglを使わないsamplesは普通に動くんだけど.
0030デフォルトの名無しさん2010/06/21(月) 12:42:42
WindowsのwxWidgetsってウィンドウの状態おかしくなってHideやShowが効かなくなったりIsShownOnScreenが変な値返してると思ってたら
他プロセスからのShowWindow、SendMessage、PostMessageとかメッセージ全部拾わずそのままDefWindowProcに渡してイベント上げてこない
そのくせ、自分自身でウィンドウの表示状態管理してるから不整合起きまくり

HWND取得してWin32APIで状態確認してWin32APIで処理しなきゃダメだ
自プロセスが出した命令のイベントしか上げてこないならEVT_SHOWなんていらないだろ
0031デフォルトの名無しさん2010/06/21(月) 13:01:24
>>29
オーバーレイをお古
かくかくのろのろだけど
0032292010/06/21(月) 16:22:58
>>31
駄目.なんにも変わらない.
0033デフォルトの名無しさん2010/06/21(月) 22:49:06
gtkより歴史が古いことに驚愕
0034デフォルトの名無しさん2010/06/22(火) 01:04:39
gtkは糞
0035デフォルトの名無しさん2010/06/22(火) 01:10:45
>>34
頑張って置き換えてくれ
0036デフォルトの名無しさん2010/06/24(木) 03:29:19
gtkしかよう知らん.あれは糞なのか?
qtとwxだとどっちが糞なんだ
0037デフォルトの名無しさん2010/06/24(木) 04:07:38
ライセンス的には一部デフォルト設定から機能オフしないといけないけどwxが自由度高い
0038デフォルトの名無しさん2010/07/10(土) 02:27:34
>>37
その辺の話ってどこかにまとまってたりしますか?
0039デフォルトの名無しさん2010/07/10(土) 02:56:56
http://bf109.seesaa.net/article/9267915.html
0040名無しさん@そうだ選挙に行こう2010/07/10(土) 07:39:43
スレ2にまとめがあったけど

GPL - コピペしてもリンクしても感染
LGPL - 動的リンクすれば影響しないが、静的リンクやコピペでは感染
wx - バイナリになっていれば煮ても焼いてもいい。コピペでは相変わらず感染

ということでいいのかな。
>>37は知らないがどういうこと?
0041名無しさん@そうだ選挙に行こう2010/07/10(土) 09:12:48
>>40
wxが余計に解らない

LGPLをゆるくしたものじゃね?
0042名無しさん@そうだ選挙に行こう2010/07/10(土) 14:10:16
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に利点があるのだろうか?
0043名無しさん@そうだ選挙に行こう2010/07/11(日) 02:01:41
wxそのものに手を加える場合はLGPL。
単に自分のアプリを作るためのライブラリとして考える場合はバイナリで
自由に使える。ソースコードつけなくてもリンクしようが配布しようが自由。
0044名無しさん@そうだ選挙に行こう2010/07/11(日) 15:48:10
はじめまして。
wxWidgets(wxWindows)日本語ドキュメントプロジェクトの方々に連絡を取った所
既に更新停止しているとの事なので、プロジェクトを移管して頂きSourceForge.netで
新たにプロジェクトを作りました。これからv 2.8 の翻訳を完成に向けて開始したい
と思っています。

https://sourceforge.net/projects/wxwidgetsjpdoc/

翻訳作業の出来る方募集中です。どうぞご参加ください。
0045デフォルトの名無しさん2010/07/23(金) 01:13:45
そうなのかー、乙です。
wxはポータブルなんで、日本でももうすこし広がるといいですね。
0046デフォルトの名無しさん2010/07/24(土) 21:05:36
wxErlang って組み込みになったのか。
http://www.erlang.org/doc/apps/wx/

Erlang/OTP R13A (2009-04-03) から、公式配布物に含む。 (最新はR14A)
0047デフォルトの名無しさん2010/07/26(月) 04:18:08
Rubyスレで聞いたけど判る人がいないっぽいのでこちらに・・・
wxRuby 0.6.0betaを使ったアプリをwxruby.so同梱で配布する場合に適用されるライセンスは
どのようになりますか?

バイナリファイルでの配布なら?任意のライセンスを適用出来るみたいですが
インタプリタ系の言語でバイナリファイルでの配布とか言われても難しいですし・・・
(exerbで配布したとしてもexeファイルの実態はインタプリター+ソースコードだし)

よろしくお願いします
0048デフォルトの名無しさん2010/07/26(月) 05:47:16
orz = 3
0049デフォルトの名無しさん2010/07/26(月) 16:52:17
そういうのわ御社の法務部で聞いてください
0050デフォルトの名無しさん2010/07/27(火) 22:18:14
すみません、誰か教えてください。
wxFormBuilderで作成されたForm内のm_textCtrlXXへの参照・代入ってどうやればいいんですか?

環境はVC++です。
0051デフォルトの名無しさん2010/07/27(火) 22:40:10
内容を読み書きしたいってことかな
ttp://docs.wxwidgets.org/stable/wx_wxtextctrl.html
GetValue、GetLineText
SetValue、AppendText
この辺りだろう、ってか公式のリファレンスに網羅されてるからすぐ見たほうがいいよ
0052502010/07/27(火) 23:11:48
お返事ありがとうございます。

wxFormBuilderで作成されたクラスがMyFrame1として、
MyFrame1::m_textCtrl28->SetValue(s);
とかやってみたけど、ビルドが通ってくれないのです。
(申し訳ございません、C++よくわかってない人です)

wxFormBuilderの場合、ここみたいに
http://wiki.wxformbuilder.org/Tutorials/UsingSubclass
サブクラス化してアクセスするのが正解なのでしょうか。
試してみたけど、なんか上手くいかないんです。
0053502010/07/27(火) 23:19:29
いちおう追記しておきますが、wxFormBuilderベースでプログラム作って、ボタンを押して反応するところまでは成功しまています(一日かかりましたが)。
文字列操作しようとしたらまたハマってしまって困っているのです。
0054デフォルトの名無しさん2010/07/28(水) 08:55:09
インスタンス化されたMyFrame1からアクセスしないと駄目です
MyFrame1 frame;
frame->m_textCtrl28->SetValue(wxT("moji"));
この場合外側からのアクセスなのでm_textCtrl28のpermissionはpublicになってないといけない
クラスの扱いはC++の基本なのでまずそちらから勉強した方がライブラリの理解も早くなります
0055デフォルトの名無しさん2010/07/28(水) 08:57:31
ごめん3行目ミスw
frame.m_textCtrl28->SetValue(wxT("moji"));
0056502010/07/28(水) 19:27:53
おおお!
MyFrame1 frame;
としてみたところ、
frame.
の入力で
frame.m_textCtrl28->SetValue
までVCの補完が効くようになりました!

いけるかなと思ったのですが、ビルドしてみると
「'MyFrame1' : クラス、構造体、共用体に既定のコンストラクタがありません。」
のエラーになってしまいます。
なにはともあれ真理に近づきつつあるようです。ありがとうございます。
C++の勉強します。
0057デフォルトの名無しさん2010/07/28(水) 19:49:01
MyFrame1 frame;
frame = new MyFrame1(NULL);
frame->m_textCtrl28->SetValue(wxT("moji"));
じゃだめ?
0058502010/07/28(水) 21:25:03
>>57
ありがとうございます。
やはり
「'MyFrame1' : クラス、構造体、共用体に既定のコンストラクタがありません。」
になってしまいます。
コードが継ぎ足し実験しまくりなのが不安なので、シンプルなコードで最初か
らやり直してみようと思います。
0059デフォルトの名無しさん2010/07/29(木) 01:38:24
MyFrame1 *frame = new MyFrame1(NULL);
じゃない?newを受けるのはポインタ

というかもう少しC の勉強してからのほうがいいと思ふぞ
0060502010/07/29(木) 02:40:00
>>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"))の効果はありませんでした。

うーん、勉強します。シンプルなコードでも試してみます。
0061デフォルトの名無しさん2010/07/29(木) 02:52:29
日記
0062デフォルトの名無しさん2010/07/29(木) 02:55:30
君にとっては新たな発見なのかも知れないが
ここ見てるひとは当たり前過ぎてただのノイズ

wx やりたいのは解るがしばらく我慢して
もう少し C++ の勉強してから改めて取り組んだ方が良い
0063デフォルトの名無しさん2010/07/29(木) 14:33:27
C++のクラスの複雑さは異常
0064デフォルトの名無しさん2010/09/06(月) 03:08:25
Windows XP上のmingw+msys(最新安定板)でmakeしたのですが、ld: final link failed memory exhausted エラーでリンクに失敗します。wxMSW(安定板)とwxWidgets-2010-06-30
物理メモリーは2G近くの空き、システムドライブも20G近く空いています。
ネットでエラーを調べてLDFLAGSに-Wl,--no-keep-memoryを追加してみましたが同じ所でエラーになりました。
誰かタスケテorz
0065デフォルトの名無しさん2010/09/06(月) 03:51:24
無視してもう一回make
0066デフォルトの名無しさん2010/09/06(月) 04:50:27
>>65
既に3回くらいやりましたが駄目でしたorz
0067デフォルトの名無しさん2010/09/06(月) 05:51:56
3回とも同じ結果?
同じ場所で止まる?
0068642010/09/06(月) 06:18:57
>>67
wxmsw291u_core_gcc_custom.dllを作成中にエラーになるのは同じで、その中でcould not read symbols: Memory exhaustedが起こる、読み込み中のオブジェクトファイルは違う事があるようです。
0069デフォルトの名無しさん2010/09/06(月) 06:45:03
cleanしちゃだめだぞ
0070デフォルトの名無しさん2010/09/06(月) 09:26:15
ビルドごとにディレクトリ作ったか?configureは試したか?
0071642010/09/06(月) 21:25:58
色々と調べたので中間?報告
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相談室で質問後結果報告させて頂きますね。<その方が良いですよね?自信がないです・・・。
0072デフォルトの名無しさん2010/09/06(月) 23:53:29
なんかサイザーの処理が最適化されていないのか、複雑なレイアウトを組むと
再描画に凄く時間が掛かる。
何か回避策や対策などがあるようならば教えてください。
0073デフォルトの名無しさん2010/09/07(火) 17:43:04
wxを窓から捨てる
0074デフォルトの名無しさん2010/09/07(火) 17:55:13
RADツール使ってサイザーやスペーサーを極力使わない構造を見つける
0075722010/09/07(火) 22:55:14
リサイズしないウィンドウにしても、再描画時にサイザーの計算を
しているっぽいので、そこをもう計算させないっていう様な設定が
出来たらしたいのです。

結局、複雑にサイザー使ってボタンとかびっちり詰め込むと
サイザーの計算が重くなるのは仕方ないなとも思うので、
固定さえ出来れば問題なくなるはずです。
0076デフォルトの名無しさん2010/09/07(火) 23:10:11
各コントロールごとに座標を想定してたりしないか?そういう使い方するもんじゃない
ボックス系のサイザーとグリッド系のサイザーを適切に使えば綺麗にまとまるし
さほど重くもならないと思うんだけど
0077デフォルトの名無しさん2010/09/07(火) 23:22:25
あとコントロール、サイザー共にExpandとStretch(proportion)はちゃんと個別に見直すべき
そのあとでBorder、埋めきれないとこはSpacer
0078デフォルトの名無しさん2010/09/09(木) 09:58:14
wxFormBuilder 3.1
Python対応
C++で日本語でもANSIで吐けるようになってるのを確認
0079デフォルトの名無しさん2010/09/11(土) 02:13:45
>>76
ちょっと見直してみたら、ボックスサイザーを入れ子にしてる所があるな。
そういうのは、グリッド系にすべきって事かな。
0080デフォルトの名無しさん2010/09/11(土) 04:07:42
サイザーごときで重くなるって
100個とか1000個単位で
びっしり詰めてるのか?
0081デフォルトの名無しさん2010/09/11(土) 11:58:53
とりあえず、コントロールは100個近く詰まってはいる。
動作が重いというか、ウィンドウを(最小化などから)表示した時に
普通はパッというぐらいの速度で表示されるけど、それがパラパラっと
コントロールが配置されるのが見えるって感じ。
0082デフォルトの名無しさん2010/09/11(土) 12:03:53
>>78
wxFormBuilderって物凄く安定しているのがスゲーと思った。
こういうのって不安定なものが多いから感心した。
ちなみに、Windows版。
0083デフォルトの名無しさん2010/09/11(土) 14:23:13
以前に作ったコントロール90くらいのダイアログ見つけたからwxFormBuilder通して見てみたけど
C2D E6600でもこの程度では特に重いとは感じない、というか変化がない
SS見せてくれたら試しに組んでみてもいいよ
0084デフォルトの名無しさん2010/09/13(月) 07:11:45
透過GIFを背景画像の上にぺたぺた貼り付けたいんだけど、透過GIFを入れたwxStaticBitmap
を配置するだけだと背景色で透過部分がfillされます。styleをTRANSPARENTにしても効かない。

ウィンドウのDCを取得して、wxDC::DrawBitmapで地道に描かないとだめですかね?
0085デフォルトの名無しさん2010/09/13(月) 11:28:09
styleをTRANSPARENT
SetMaskColour
0086デフォルトの名無しさん2010/10/18(月) 01:51:53
wxTextCtrlでカーソル位置にテキストを挿入するのってどうやるのが楽?
GetInsertionPointの前後で分割して、入れたい値を合成して
再挿入、ってやったけど
どうも改行があると値がずれるようなんで困ってて。
0087862010/10/18(月) 02:20:13
自己解決。Replace使えば良かったのか。
スレ汚しすまんかった。
0088デフォルトの名無しさん2010/10/18(月) 02:32:29
>>86-87
普通にWriteTextで
キャレット位置に挿入(選択状態なら置換)出来るのでは?
0089862010/10/20(水) 23:19:42
>>88
……その通りでした。
ちゃんと隅々までドキュメント読むべきでした。
遅くなったけどどうもありがとう。

0090812010/10/31(日) 01:33:07
>>83
その後、同一マシン上のVMwareでWindows2000とWindows7を実行して試してみたら、
Windows7上では同じ遅さだったけど、Windows2000ではめっちゃ速かったから
少なくともサイザーが遅いって事はなさそう。

ただ、VS2010上でビルド出来ないし、新しいプラットフォームの追従はあまり
早くないね。3.0が出てくれれば解決するのかな。
0091デフォルトの名無しさん2010/10/31(日) 01:53:11
>>90
単にスワップ起こしてるだけじゃねーの?
2GB程割り振って検証してみたら?
0092デフォルトの名無しさん2010/10/31(日) 17:17:26
>>90
VS2010のx64でビルドして使ってるけど、特においらの範囲では問題ないな。

VC6プロジェクトがVS2010で変換できないってことなら、VC2005か、VC2008で変換してからVS10で開けば通るよ。
2.9.xならVC8,VC9用のプロジェクトもある。
0093902010/11/03(水) 00:56:36
>>92
> VS2010のx64でビルドして使ってるけど、特においらの範囲では問題ないな。
再描画の時に「パッ」じゃなくて「パラ」って感じなんで、まぁ問題っていうほど
じゃないんだけどね。

> VC6プロジェクトがVS2010で変換できないってことなら、VC2005か、VC2008で変換してからVS10で開けば通るよ。
なるほど、その手があるのか。ありがとう。
0094デフォルトの名無しさん2010/11/13(土) 05:11:47
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から落としてきてるけど、こんな単純なところでミス
してたらテスト通らないだろうし…
俺が何かくだらないミスしてる気がしてならないので、誰かツッコミ入れて下さい。
0095デフォルトの名無しさん2010/11/13(土) 11:25:39
>送信先がhttpならHostをwww.google.comに書き換えないといけないと思うんだが、俺間違ってる?

あってる
0096デフォルトの名無しさん2010/11/13(土) 11:31:27
wxURL_NOHOST
0097デフォルトの名無しさん2010/11/13(土) 11:34:21
これかな
http://yomi.mobi/read.cgi/pc8/pc8_tech_1097524712/515-
0098デフォルトの名無しさん2010/11/13(土) 11:54:08
wxRIchTextCtrlの日本語インライン入力パッチありませんか?
0099デフォルトの名無しさん2010/11/23(火) 18:39:00
おや規制明けてる。
>>98
もう解決してる気がするけど、OS毎で処理系が全く異なる上、
日本と中国と韓国くらいしか影響がないのでそんな便利なパッチはたぶん無い。
RichTextはわからんが、Win上のwxStyledTextCtrlと同じなら、
MSWWindowProcをオーバーライドして、
WM_IME_STARTCOMPOSITION、WM_IME_COMPOSITIONあたりを捕捉、
Caretの位置から自分で逐次IMEの位置情報を変更してやればいいと思う。

しかし上でwxURLの話もされてるけど、HTTP通信周りの処理、
結構ボロボロだなコレ。
そういう用途で使ってるユーザがほとんどいないんだろうが・・・。
0100デフォルトの名無しさん2010/11/23(火) 19:22:29
UI以外の部分でwx使う意味ってあんまりないからじゃない?
0101デフォルトの名無しさん2010/11/24(水) 19:51:50
そうか
0102デフォルトの名無しさん2010/11/25(木) 23:22:37
もう誰か作ってるだろと探したけど
wxOnigurumaとか無かった。残念。
0103デフォルトの名無しさん2010/11/26(金) 07:32:10
詳しい方ちょっと教えて下さい…。

ちょっと前からxchmというヘルプビューアを日本語表示できるようにしているのですが、
ShiftJIS->Unicodeの変換がうまくいきません。

一応wxString、wxMBConv、wxCSConv、wxEncodingConverterのリファレンスと
ヘッダにある関数の組み合わせは一通り試したつもりですが、変換されるはずが
変換されなかったり、Initに失敗したりと散々です。

結局g_convert関数(GLibのiconvラッパー)で逃げましたが、wxWidgetで
書かれているソースに突如異物混入みたいで非常に美しくありません。
動作はしたので後は趣味の問題ですが、なんとかならないでしょうか?

環境はDebian、wxWidgets 2.6.7.1です。
0104デフォルトの名無しさん2010/11/26(金) 21:51:03
2.9のドザーな俺にはアドバイスはできんが、
この辺で問題視されてる「wxMBConv はいくつかのサブクラスを持っていて、
こいつらはことごとく wchar_t の内部表現が UCS であることを仮定してる。」
あたりが原因じゃないのか?
ttp://diary.imou.to/~AoiMoe/2004.09/middle.html#2004.09.13
0105デフォルトの名無しさん2010/11/26(金) 23:29:00
>>104
早速感謝。

あー、そのページ、自分も見ました。
今ネット上にある日本語ページの中では一番内容が濃そうでしたね。

wxWidgetsが文字コード回りで大分無茶をしてるらしいことだけは判りました。
実際、文字コード変換には一旦wchar_t型を経由しないとならんのですけど、
 charのSJIS->MB2WC->WC2MB
とかやると、SJISでもUTF8でもない謎コードになっちゃうんですよね。

ちなみに、前スレでもWin使いの方が全く同じ趣旨の質問されてましたけど、
結局やはりWinAPIでなんとかしたらしいですね。
やっぱり無理ですかねぇ…。
0106デフォルトの名無しさん2010/11/27(土) 00:43:27
wchar_t の中身がUCS前提なのはこの場合問題じゃないだろ…
>>104 の言っているUnicodeって、具体的に何?wxはUnicodeビルドで、wxStringにしたいの?

SJISからwxStringにしたいのなら、 wxString s(sjis_string, wxCSConv('cp932')); を試した?
コード出さないで質問しても、エスパーじゃない限り回答できないよ。
0107デフォルトの名無しさん2010/11/27(土) 02:06:26
>>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ベースのコードとやりとりするための処理が入るのですが、それが
また汚いので、できれば回避したいです…)
0108デフォルトの名無しさん2010/11/27(土) 08:39:35
言い訳はいいから問題起こしてる例のコードだせよ
0109デフォルトの名無しさん2010/11/27(土) 11:28:57
>>108
えー、失敗コードはもう全部消しちゃったんですよね…。
てか、ここまでの説明で判る方は判るし、判らん方はそこまででしょう。
この場合、頑張って失敗コード再現しても結果は後者だと思うので、No thank you.
0110デフォルトの名無しさん2010/11/27(土) 11:41:57
エスパーのかたのみお答えください
0111デフォルトの名無しさん2010/11/27(土) 13:14:50
便乗して質問してもいいかな?

wxMBConvとwxCSConvの違いって何?
ヘルプ見てもよくわからん…
0112デフォルトの名無しさん2010/11/27(土) 13:26:57
>>111
wxMBConv は、変換系の抽象クラス。
wxCSConv は wxMBConv を継承した具象クラスで、 >>106 みたいに任意のエンコーディングとの変換を行う。
wxMBConvUTF8 も wxMBConv を継承した具象クラスで、 UTF-8との変換を行う。
01131112010/11/27(土) 13:34:03
>>112
なるほど。ありがとう。
01141072010/11/27(土) 15:03:23
http://ja.pastebin.ca/2003497
少なくともUbuntu 10.10では、wxCSConvでちゃんとcp932からUTF-8への変換ができたよ。
Debian etch とか古すぎて使う気にならないけど。
0115デフォルトの名無しさん2010/11/27(土) 17:00:22
>>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でした、スイマセン。
0116デフォルトの名無しさん2010/11/27(土) 17:17:40
C++ の勉強からやり直せ
0117デフォルトの名無しさん2010/11/27(土) 17:40:21
xchmのコード変更完了!
おかげさまで変更箇所が50行が4行になり、かなりすっきりしました。

相談に乗って頂いた方、大変有難うございました。
01181072010/11/27(土) 18:21:41
fmapbaseの中にwxFONTMAP_CP932のエンコーディング名として最初にWINDOWS-932という
文字列が登録されていて、iconv にはこの名前のエイリアスが登録されていないから iconv に
失敗する、、、んだけど、iconv_open に失敗したらWINDOWS-932の次のCP932が利用されるように
見える。なのに失敗してる。

深追いはしてないからどこでコケてるのか判らないけど、とりあえず wxCSConv にはエンコーディング名を
直接渡したほうが、その名前が直接 iconv に渡るから落とし穴が少なそう。
0119デフォルトの名無しさん2010/11/27(土) 18:27:01
なるほど。ありがとう。
0120デフォルトの名無しさん2010/11/27(土) 18:41:10
>>118
あー、そういうことでしたか、なるほど。
感謝!
0121106=114=1182010/11/27(土) 20:54:49
名前を間違えて107にしてしまった。
>>117 xchm の修正って、本家にフィードバックする予定ありますか?
Linuxでもchmファイル読めたら便利そう。
0122デフォルトの名無しさん2010/11/27(土) 22:36:15
>>121
フィードバックの予定は特に無いです。
というか本家、まだ生きてるんだろうか?

Ad-hocだけど、ここにパッチ貼っときます。
これでコンテンツと索引がちゃんと日本語で表示されるようになります。
検索の日本語対応は、ぱっと見かなり難しそうだったので保留中です。
むしろ誰かやって下さい…。

ちなみに、Linuxでchm読むだけでしたら他にもいくつかビューアがあるようですよ。
ご参考まで。
0123デフォルトの名無しさん2010/11/27(土) 22:37:06
+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;
0124デフォルトの名無しさん2010/11/27(土) 22:39:25
+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
+ }
+
0125デフォルトの名無しさん2010/12/01(水) 16:15:11
wxPythonでとあるチャットのクライアントを作っているのですが
wx.(Rich)TextCtrlでは打ち消し線は使えないのでしょうか?
0126デフォルトの名無しさん2010/12/03(金) 00:13:26
>>125
wxFONTFLAG_STRIKETHROUGHを指定したフォントを適用してやるとかで
できるんじゃない?
0127デフォルトの名無しさん2010/12/04(土) 15:45:14
ありがとうございます。

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

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

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

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

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

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

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

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

wxWidgets(wxstd.moの日本語版, ja.po)をお使いの皆様へ
ttp://suzumizaki.blog6.fc2.com/blog-entry-207.html
0170デフォルトの名無しさん2011/03/04(金) 20:34:43.27
>>164
こっちも読んでおくといいよ。
二重開放以外にもdeleteがまずい理由があるようだから。
ttp://docs.wxwidgets.org/trunk/overview_windowdeletion.html
0171デフォルトの名無しさん2011/03/04(金) 21:31:47.32
>>168
出来ました!!
ありがとうございました!!!
0172デフォルトの名無しさん2011/03/07(月) 03:32:17.98
wxListCtrl の
SetItem - GetItemText とか
SetItemText - GetItem とか
なんか変な対応してるみたいなんですけど
こんなもんなんですか?
他にも IsIconized とか IsShown とか
ドキュメント通りじゃなくて
めちゃくちゃな感じがするんですが
設計者ってパラノイア?
0173デフォルトの名無しさん2011/03/07(月) 04:30:33.22
馬鹿には無理
つ ttp://wiki.wxwidgets.org/WxListCtrl
Get the String Contents of a "cell" in a LC_REPORT wxListCtrl
0174デフォルトの名無しさん2011/03/07(月) 07:16:25.58
>>173
出来ました!!
ありがとうございました!!!
0175デフォルトの名無しさん2011/03/07(月) 11:00:32.39
質問です
wxWidgetsにはMD5やSHAを計算してくれる関数はありますか?
0176デフォルトの名無しさん2011/03/07(月) 11:32:42.63
つttp://wxwidgets-hash-md5.fyxm.net/
0177デフォルトの名無しさん2011/03/07(月) 22:35:46.50
>>175
176じゃないけど、MD5単品ならこういうのとか。
ttp://www.koders.com/cpp/fid80078010DEFC2265E917FE6436718F0AE038CBE6.aspx
0178デフォルトの名無しさん2011/03/08(火) 09:26:30.33
>>178
ありがとうございます
とりあえず別のMD5ライブラリが見つかったのでそちらで間に合わせたのですが
ライセンスの問題とか考えると教えて頂いたもので置き換えた方が良いかも知れません
余力があったら後でご報告します
0179デフォルトの名無しさん2011/03/09(水) 04:31:11.46
wxHTTP::GetResponse が 200 とか 403 とかじゃなくて 0 を返すんですけどバグですか?
0180デフォルトの名無しさん2011/03/09(水) 04:46:40.12
つ ttp://wiki.wxwidgets.org/WxHTTP
0181デフォルトの名無しさん2011/03/09(水) 05:29:32.87
>>180
出来ました!!
ありがとうございました!!!
0182デフォルトの名無しさん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 版のを使っています。
0183デフォルトの名無しさん2011/03/09(水) 17:16:21.87
むしろUTF-8のまま扱うかUNICODEにしてしまった方が良いのでは?
0184デフォルトの名無しさん2011/03/09(水) 20:02:39.82
>>182
wxStringOperations::IsValidUtf8String
0185デフォルトの名無しさん2011/03/10(木) 08:17:32.00
>>184
ありがとうございます。
今レス見たばかりなのでまだ試していませんが、
http://docs.wxwidgets.org/trunk/annotated.html
を見ても wxStringOperations は見当たらず
ネームスペースかとも思うのですが、
こういったものはどうやって見つければ良いものですか?
0186デフォルトの名無しさん2011/03/10(木) 08:25:43.01
>>182
wxString::FromUTF8Unchecked
0187デフォルトの名無しさん2011/03/10(木) 08:27:16.48
>>185
http://trac.wxwidgets.org/wiki/DebugRelease
0188デフォルトの名無しさん2011/03/10(木) 08:34:44.59
>>186
ありがとうございます。
しかしそれは Valid じゃない UTF8 データが渡されたときの
動作は undefined だと書かれていますね。
結局事前に調べないといけないことにかわりないようです。

>>187
ありがとうございます。
中身を読んでも良く判りませんでした。
どういう意味でしょうか?
0189デフォルトの名無しさん2011/03/10(木) 08:38:29.58
ん?
「〜」301C(E3809C)
はValidじゃないのか?
0190デフォルトの名無しさん2011/03/10(木) 09:19:31.75
問題なのはUTF-8として正しいかどうかじゃなくて
cp932に変換出来るかどうかってことなんだよな
そうなるとスレ違いかもな
0191デフォルトの名無しさん2011/03/10(木) 13:58:57.41
wxWidgetsって、けっこうS-JISの処理が弱いので、そこの部分だけはネイティブの処理にしたほうがいいかも
俺もアプリ作った事あるけど、S-JISに変換する部分だけはWideCharToMultiByte関数を呼ぶようにしたよ
0192デフォルトの名無しさん2011/03/10(木) 16:16:13.99
>>184
残念ながら使えませんでした。
0193デフォルトの名無しさん2011/03/10(木) 16:24:05.27
>>192
wxUSE_UNICODE_UTF8 を定義してないと使えないよ
つ ttp://docs.wxwidgets.org/trunk/overview_string.html
0194デフォルトの名無しさん2011/03/10(木) 22:06:44.16
みなさん色々とありがとうございます。
wxString sjis_data = wxString::FromUTF8(utf8_data.c_str());
のところで例外出して死ぬパターンと sjis_data が空になるパターン
それからちゃんと成功するパターンとがありました。
結局アクセスしていたサイトに広告が入っていて、
時間帯によって内容が変わるようなのですが、
どうも本体は UTF8 なのに広告部分だけ SJIS とか、
お粗末なサイトだったのが混乱した原因の一つでした。
0195デフォルトの名無しさん2011/04/19(火) 00:00:08.70
3.0マダー(AA略)
0196デフォルトの名無しさん2011/05/25(水) 00:30:08.01
サイザーage
0197デフォルトの名無しさん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を呼んでやれば解決する
0198デフォルトの名無しさん2011/07/16(土) 23:02:41.64
GUI の配置は XML で定義出来るのが一番良いなあ
0199デフォルトの名無しさん2011/07/17(日) 01:18:11.68
それ何てXUL
0200デフォルトの名無しさん2011/07/17(日) 22:48:55.64
wxだってXRCがあるじゃまいか。
0201デフォルトの名無しさん2011/07/17(日) 23:28:11.01
誰も無いとは言ってないぞ
0202デフォルトの名無しさん2011/07/17(日) 23:40:23.13
後出しww
0203デフォルトの名無しさん2011/07/17(日) 23:43:54.73
ネタにマジレスww
0204デフォルトの名無しさん2011/07/18(月) 05:50:22.06
なんのこっちゃ。
0205デフォルトの名無しさん2011/07/28(木) 23:53:32.75
リストボックスのアイテムとして
ボタンやテキストボックスを表示できる?
0206デフォルトの名無しさん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にも適用されると見た目を
いじるだけならすごく楽になるんだろうけどねぇ。
0207デフォルトの名無しさん2011/07/29(金) 07:16:29.38
>>206
ありがと
0208デフォルトの名無しさん2011/08/11(木) 06:56:31.32
自作のTestApp(wxWidgets製)は起動時に渡されたパスを読み込んで処理を
するとして、既に起動しているTestAppがあれば、そのTestAppにパスを引き
渡して自分は死ぬ(多重起動しない)、という動作をしたいです。
Winの場合、EnumWindowsでトップレベルウィンドウでTestAppを探し、
WM_COPYDATAをSendMessageで投げMSWWindowProcで受ける、
という方法を採っていますが、この辺のニーズは常にあるだろうし、
もっと楽なやり方があるんじゃないかと思ってます。
こういう方法の方が楽、とかありましたら教えてください。
と
0209デフォルトの名無しさん2011/08/11(木) 10:26:43.62
Mutex
02102082011/08/11(木) 20:27:39.52
>>209
コメントありがとう。
でもMutexだと多重起動のチェックには使えるけど、
「既に起動している別プロセスへ任意のデータを引き渡す」
って処理には使えなく無いですか?


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

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

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

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

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

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

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

wxWidgetsのススメ
http://up-cat.net/wxWidgets%A4%CE%A5%B9%A5%B9%A5%E1.html
0221デフォルトの名無しさん2011/09/02(金) 23:04:35.91
いまは VC2010Express でも wxWidgets 使えて便利だわ
0222デフォルトの名無しさん2011/09/02(金) 23:29:46.37
2.9.2落としてきてVC2008でビルドしてたけど、これgdgdすぎ
スタティックライブラリはできたけど、DLL版は全然ビルドできないわ、サンプルはデバッグ
ライブラリ用になってるからいちいち直さないといけない&直しても同じリソースがどうたら
でビルドできんし、Qtにいくわ
0223デフォルトの名無しさん2011/09/03(土) 00:34:44.80
おいらはMinGWでMakefile作りながらGUI作ってるよ〜 (^q^)
0224デフォルトの名無しさん2011/09/03(土) 01:05:50.35
ああ、早とちりすまん
結局添付されていたVC2008用のプロジェクトファイルがうんこで、VC6用の奴を変換して
ビルドしたらうまくいきましたわ
サンプルも同じでVC6用の奴を変換してビルドすると正常にビルドできました
悪口いってすまん、けどビルドできないVC2008用プロジェクトファイルって罠じゃないのか
0225デフォルトの名無しさん2011/09/03(土) 10:36:44.01
普通makefileの方使わない?
0226デフォルトの名無しさん2011/09/03(土) 11:45:57.63
nmakeしたらいきなりエラーで止まったし、ぐぐるとnmakeよりもVC++上でコンパイルする記事が多かった
ので、そうしてました。
お騒がせして申し訳ないついでに実は開発版の2.9.2をビルドしようとしてたみたいで、俺死にたい...
というより氏ね>俺
0227デフォルトの名無しさん2011/09/03(土) 12:10:03.39
VC使わないといけない理由があるんなら仕方ないけど
gccの方がすんなり行くんじゃないかなぁ。
0228デフォルトの名無しさん2011/09/03(土) 18:49:10.70
WinでgccというとMinGだよね?
たまたまVC入ってたからVCでやってたけど、MinGの方が捗るの?
0229デフォルトの名無しさん2011/09/03(土) 20:59:18.77
wxWidgetsの開発はLinuxのgccで行われてるだろうからMinGW+gccだと環境づくりが楽かも?
VCのことは知らないけどMinGWだと普通に2.9.2コンパイルできたし
コーディングの効率を考えるとVCのオートコンプリート機能が使えたら楽かもしれんが、たぶん出来んだろうしな
0230デフォルトの名無しさん2011/09/03(土) 21:56:21.73
winでわざわざMinGなんて使う必要ないよ。
VCでいい。
0231デフォルトの名無しさん2011/09/04(日) 17:11:05.31
MinGWだとEXEサイズ小さくなるかなと試してみたが、makeしてもlibができないなぁと1時間も
悩んでた、.aで正しいのにwww
アホすぎる俺
しかしwxWidgetsいいね、コントロールは揃ってるし、ドッキングもできる、開発版にすればリボンもどきも
使えるし、wxFormBuilder使えばGUIで画面組み立てられるし、とりあえず満足できる環境だし
0232デフォルトの名無しさん2011/09/04(日) 19:07:07.57
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の方が優秀な気がする
0233デフォルトの名無しさん2011/09/04(日) 19:22:45.46
>>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
0234デフォルトの名無しさん2011/09/04(日) 19:51:43.28
ちなみにgccは-sオプションをつけると結構ファイルサイズは小さくなる
0235デフォルトの名無しさん2011/09/04(日) 19:52:42.86
あ、既出だった
0236デフォルトの名無しさん2011/09/04(日) 21:11:45.91
>>233-234
アホな俺にわざわざありがとう!
もう1回試してみます!
0237デフォルトの名無しさん2011/09/04(日) 22:39:22.73
>>230
なるほど人によるなあ。
俺なら「わざわざVC使わんでも、MinGでいい」って発想になるわ。
0238デフォルトの名無しさん2011/09/04(日) 23:30:54.03
>>233
ライブラリも作成し直し、サンプルもビルドし直しましたがサイズは6621KBでした
あとDLL依存はとれないのですね
0239デフォルトの名無しさん2011/09/05(月) 00:04:36.25
>>237
同意。
UNIX文化的には、gccが「標準」でVCは「非標準」って認識だからなぁ。

自分で何か書く時とか、「自分はgccしか使わないけど、Win使いのためにVCもサポートしてやるか」ってレベル。
0240デフォルトの名無しさん2011/09/05(月) 00:32:26.75
結局どっちの文化に属してるかによって
何がデフォで何がわざわざなのかが違うってことで。

で、wxそのものがUNIX文化なんだよな。
0241デフォルトの名無しさん2011/09/05(月) 12:01:41.27
>> 238
サンプルはそのままビルドするとDLL依存になるとおもう。

cd samples
make "LDFLAGS = -static"

こんな感じでいかかでしょ。
0242デフォルトの名無しさん2011/09/05(月) 19:03:01.60
>>241
いや、自分でmakeファイルに-static直書きしたけど駄目でした
まぁ、なんか勘違いしてるか頭がアホなんて理解できてないだけでしょう
とりあえずVCでも問題ないのでVCでやります、いろいろありがとうございました
0243デフォルトの名無しさん2011/09/05(月) 19:16:34.99
>>242
がんがれ。

ただ、オープンソース系のライブラリを今後使っていくんなら
いずれにしてもgcc系の流儀とかも覚えておいた方がいいと思うよ。
0244デフォルトの名無しさん2011/09/06(火) 00:10:08.28
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じゃないけどいいの?
0245デフォルトの名無しさん2011/09/10(土) 20:25:18.76
質問お願いします。

http://www.dotup.org/uploda/www.dotup.org2004935.jpg

こういうよくある(名前、種類、ディレクトリ、サイズ)みたいなのを
表示したいんですがヴィジェットは何を使ったらいいでしょうか?
できれば画像のように名前のところの矢印みたいなのを付けたいのと
項目の順番をD&Dで入れ替えたり表示、非表示をポップアップメニューで行いたいです。
項目にはDBのカラムを割り当てたいと思っています。
0246デフォルトの名無しさん2011/09/10(土) 20:38:38.06
すいません、listctrlで出来そうですね。
なんでいつも質問した後は簡単に見つかるんだろう…
0247デフォルトの名無しさん2011/09/10(土) 23:30:44.52
age
0248デフォルトの名無しさん2011/09/11(日) 23:37:25.34
sage
0249デフォルトの名無しさん2011/09/20(火) 23:30:06.13
wxWidgetsのライセンスって何なの(L-GPL)?
これ使って書いたプログラムってソースコード開示する必要あるの?
教えてエロい人!!
0250デフォルトの名無しさん2011/09/22(木) 08:11:29.04
ゴメン、答えられるけどエロくない。
0251デフォルトの名無しさん2011/09/22(木) 12:00:14.06
インポ乙
0252デフォルトの名無しさん2011/09/22(木) 18:59:22.32
まあその質問はググッたらでてきそうだしな…
ところで組み込み用のwxWidgetsとかないんだろうか。
0253デフォルトの名無しさん2011/09/23(金) 14:09:14.39
>>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
0254デフォルトの名無しさん2011/09/23(金) 20:06:16.47
情報古過ぎないか
0255デフォルトの名無しさん2011/09/23(金) 21:55:11.24
世界線は変わらなかった
0256デフォルトの名無しさん2011/09/23(金) 22:27:50.66
つうか本家のホームページに書いてあるがな。
0257デフォルトの名無しさん2011/09/23(金) 23:34:52.13
これですね
http://www.wxwidgets.org/about/newlicen.htm

"wxWindows Licence"で配布されていて、
ソースコード開示の必要はないというのが一応の答えかな
0258デフォルトの名無しさん2011/09/24(土) 22:07:43.51
需要があるかどうか不明ですが。

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
0259デフォルトの名無しさん2011/09/24(土) 22:23:14.63
>>258
乙です
てかwxWidgetsにも正規表現ライブラリあったんだな
0260デフォルトの名無しさん2011/09/24(土) 23:40:22.99
>>258
正格表現って初めて見たが、正則表現ではなくて?
POSIXブラケットのうち、[. .] [= =] [:<:] [:>:]とかって他のライブラリじゃほとんど見ないな。
[[=A=]]ってAやÄなどにマッチするんだっけ?
0261デフォルトの名無しさん2011/09/25(日) 20:52:38.34
>>260
ご指摘Thx. 直しておきました。どこで間違ったんだろう。

> [[=A=]]ってAやÄなどにマッチするんだっけ?
建前としてはそうなるはずだけど誰も実装してないとか何とか。よく知らないですが。
調べてみたら [. .] と [= =] の訳文はかなりおかしい気がしてきた。

0262デフォルトの名無しさん2011/09/26(月) 21:03:37.52
実は訳間違ってました[[=A=]]

ってかくと顔文字っぽい。
0263デフォルトの名無しさん2011/09/27(火) 09:53:24.70
POSIXって良く聞くけどなんですか?
0264デフォルトの名無しさん2011/09/27(火) 20:16:50.72
258です。訳文とかちょっと修正しました。ページ内部のリンクも増やした。

>>263
実は私もよく知らない。
0265デフォルトの名無しさん2011/09/27(火) 23:02:57.78
雲丹の標準規格じゃないの?
0266デフォルトの名無しさん2011/09/27(火) 23:05:37.07
http://ja.wikipedia.org/wiki/POSIX
POSIX(ポジックス パーズィックス、Portable Operating System Interface)とは、
異なる実装のUNIX OSを始めとする各種OSに共通のAPIを定め、移植性の高い
アプリケーションソフトウェアの開発を容易にすることを目的としてIEEEが策定した
アプリケーションインタフェイス規格である。
0267デフォルトの名無しさん2011/09/28(水) 21:35:43.22
motifもIEEEが規格決めてたから、こっち使いましょうよ
0268デフォルトの名無しさん2011/09/29(木) 14:42:15.49
>>263
ザックリとでよければ「UNIX互換」くらいに考えておけば良い。
0269デフォルトの名無しさん2011/11/08(火) 17:30:42.91
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();}
0270デフォルトの名無しさん2011/11/08(火) 17:42:09.03
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]といれれば複数ファイルを選択した場合に一番最初のファイル名が入る認識でしたが間違っているようです・・・

複数ファイルの選択と、複数のファイル名の取得方法を検索したのですが、サンプルなどを見つけることができませんでした。

どこが間違っているか教えてください。

0271デフォルトの名無しさん2011/11/08(火) 18:28:13.72
>>269
最後の行
OpenDialog->Destroy();}

中括弧が全角になってるなあ
てかこれ全コードじゃないよね
0272デフォルトの名無しさん2011/11/08(火) 20:52:59.24
サンプルにある"dialogs"が参考になるんじゃないかな、
"File operations->Open files"というのがある。
0273デフォルトの名無しさん2011/11/08(火) 21:01:42.80
>>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)
0274デフォルトの名無しさん2011/11/08(火) 21:03:08.95
{
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();
//*)
0275デフォルトの名無しさん2011/11/08(火) 21:04:37.12
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"));
0276デフォルトの名無しさん2011/11/08(火) 21:05:18.62
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();
}
0277デフォルトの名無しさん2011/11/08(火) 21:06:07.61
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();
}
0278デフォルトの名無しさん2011/11/08(火) 21:58:12.30
連続投稿規制 5回でなるんですねが・・・
こんな感じです。
配列・ポインタなど、マニュアルを目を通したのですが、完全に理解していません。
とりあえず色々さわりながら理解していこうかと考えています。

>>272
ありがとうです。
sampleフォルダの中のですね。
当初この中を探したのですが、wxSmithでのプロジェクトがなかったのであきらめていました。
dialogs.cppの790行目からそれらしい記載があったので参考にしてみます。

ありがとうでした。
0279デフォルトの名無しさん2011/11/08(火) 22:45:02.83
迷惑な香具師だな
0280デフォルトの名無しさん2011/11/09(水) 07:33:07.56
>>278
長いときはcodepadとかideone使おうぜ・・
0281デフォルトの名無しさん2011/11/09(水) 08:19:10.74
会社から帰ったら考えてみるわ>>278
0282デフォルトの名無しさん2011/11/09(水) 14:01:41.90
>>280
そのような場所があるとは知りませんでした。
次からそうします。

スレ汚しすみませんでした。
あと、/sample/dialogs/dialogs.cppの該当部分を、コピペしただけで複数ファイルの選択と、表示ができました。
意味を調べながら理解していきます。

ありがとうでした。
0283デフォルトの名無しさん2011/11/09(水) 17:58:05.53
中学生か
まあがんがれや
0284デフォルトの名無しさん2011/11/22(火) 02:03:10.37
ubuntuでwxWidgetsの勉強中なのですが、samplesフォルダ内のサンプルソース(c++)をいくつか実行してみようと思い、付属のmakefile.cpp及びmakefile.unxをmakeコマンドで実行しようとするとコンパイルに失敗します。
端末より
g++ -c foo.cpp `wx-config --cppflags`
という形でコンパイルしてみてもエラーが出ます。

コンパイルに失敗したサンプルソースはlistbox.cppとlisttest.cppです。

なにかコンパイル時に指定しなければいけないファイルなどがあるのでしょうか?
どなたか教えてください
0285デフォルトの名無しさん2011/11/22(火) 07:25:11.04
wxをビルドしてインストした?
0286デフォルトの名無しさん2011/11/22(火) 12:20:24.62
>>284
エラーメッセージ貼ってよね!
02872842011/11/22(火) 16:11:40.78
>>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
返信ありがとうございます。
今すぐにエラーを貼るのは難しいので、数時間後にまた貼らせて頂きます。
02882842011/11/22(火) 21:45:18.75
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>
0289デフォルトの名無しさん2011/11/22(火) 22:33:02.64
サンプルはどこから持ってきたやつなの?
インストールしてるwxWidgetsとサンプルのバージョンは同じ?

そもそもインストールはどうやってしたの?
パッケージから入れたの? それともソースからビルドしたの?

とまあ、気になる点はいろいろですが、
とりあえずパッケージからwxWidgetsの開発環境をインストールして、
同じバージョンのサンプルをコンパイルするのは、
最初に書かれてる方法で普通にできます。

ソースからビルドすれば付属してるサンプルも一緒にコンパイルしてくれるはずです。
0290デフォルトの名無しさん2011/11/23(水) 00:13:32.17
>>288
そのエラーメッセージは最初の方は含まれてる?
wxのincludeが読み込めてないように思える。includeのエラーが最初にないかい?
0291デフォルトの名無しさん2011/11/23(水) 03:07:47.66
>>288
makefile.gccはMinGW用のMakefileじゃなかったっけ?

make -f <対象のMakefile> でだいたい行けるはず
0292デフォルトの名無しさん2011/11/23(水) 03:19:45.38
そもそもLinuxでwxWidgetsやろうと思ったら

�@wxWidgetsのソースダウンロード
�A./configure <- 自分が欲しいオプション ->
�Bmake && make install
�Csamplesフォルダにあるソースコードを「make」コマンドでコンパイル

で終わるはずなんだがなあ
0293デフォルトの名無しさん2011/11/23(水) 07:52:23.63
MinGWでwxWidgetsやろうとしたら面倒すぎて死んだ
0294デフォルトの名無しさん2011/11/23(水) 15:36:30.36
>>293
大丈夫、慣れたらできる(マゾ)
0295デフォルトの名無しさん2011/11/23(水) 15:48:53.79
>>284
しかもよく見たらコマンド間違えてるな

× g++ -c foo.cpp `wx-config --cppflags`

○ g++ -c foo.cpp `wx-config --libs` `wx-config --cxxflags` -o foo

ライブラリにリンクしてないから実行ファイルができてない可能性が
0296デフォルトの名無しさん2011/11/23(水) 21:59:05.34
>>293
wxDev-C++
http://wxdsgn.sourceforge.net/
みたいなのもあるから暇なときに試してみたら?

VC++でやるよりは楽かも…、しれません。
0297デフォルトの名無しさん2011/11/24(木) 00:18:52.26
devC++は好きで昔から結構使ってるけど
やっぱvc版インストしてvcの統合環境でやったほうがデバッグは楽だよ
使うまではdevCのパッケ導入が楽かも知れんけどw

(最近はc#が色々楽すぎるんでwx自体全然使って無いけど・・・)
0298デフォルトの名無しさん2011/11/24(木) 06:38:20.30
VC++2008EnterpriseEditionでやったらめちゃくちゃ簡単だった
0299デフォルトの名無しさん2011/11/24(木) 14:16:50.31
hosyu
03002842011/11/28(月) 13:24:44.41
レスの間が開いてすみません。みなさん色々とアドバイスありがとうございます。
>>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`

というようにコンパイルしてたんですけど良くなかったでしょうか。
0301デフォルトの名無しさん2011/11/28(月) 19:19:16.59
>>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ってどういうものなのかググって意味を考えたほうがいいよ
0302デフォルトの名無しさん2011/12/05(月) 19:16:58.26
LinuxでパッケージからwxWidgetsを入れた場合、setup.hはどこにあるのでしょうか?
wxUSE_ACCESSIBILITYを有効にしようと思ってファイル検索したら大量にかかったので幾つか内容を変更してみても有効にならなかったので。
0303デフォルトの名無しさん2011/12/05(月) 19:26:14.75
パッケージはバイナリしか入ってない、つまりオプションを切り替えるのは不可能では?
ソースからビルドした方がいいと思われ
0304デフォルトの名無しさん2011/12/05(月) 19:31:56.85
>>303

ありがとう。ソースから入れなおしてみる。
0305デフォルトの名無しさん2011/12/05(月) 19:45:40.51
>>302
Linuxでは通常はソースのパッケージが別に用意されてるよ。

ディストリによるけど後ろに-develみたいなのがついたパッケージ
を入れるとソースが入る。
0306デフォルトの名無しさん2011/12/05(月) 21:19:08.30
>>305
そのレスを見る前に入れなおしてしまった…教えてもらったのに申し訳ないです。



オプションの切り替えは結局setup.hをいじれば良いのでしょうか?
0307デフォルトの名無しさん2011/12/05(月) 21:34:18.68
>>306
./configure -h で付けられるオプションが見れるからやってみ、その中にwxUSE_ACCESSIBILITYも入ってるだろう
0308デフォルトの名無しさん2011/12/05(月) 21:38:07.80
$ ./configure -h | grep accessibility
--enable-accessibility enable accessibility support

あったあった。何に使うのかわからんけどどうぞ。
0309デフォルトの名無しさん2011/12/06(火) 11:00:02.97
>>307,308
何から何まですみません。
03102552011/12/06(火) 11:57:28.16
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で意味あるのか?
0311デフォルトの名無しさん2011/12/06(火) 14:11:37.79
>>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では意味が無いんでしょうか…
03123112011/12/06(火) 14:27:45.09
度々すみません。
こちらでもマニュアルを確認したら、accessはWindowsのみと書いてありました。
今度からはマニュアルを良く読んで、わからなかったらこちらで聞きたいと思います。
自分自身でもあんまりにゆとりすぎて反省してます…。
みなさん大変ご手数をおかけしました。
0313デフォルトの名無しさん2011/12/07(水) 15:35:36.35
ほとんどのゆとりにくらべたらまだましなほうだわ
0314デフォルトの名無しさん2011/12/07(水) 19:17:24.24
ゆとりはHSPとかC#に行くだろうからこっちには来ないだろうな
あとC++のGUIライブラリで有名で日本語ドキュメントがあるのはQtとかgtkだろうからさらにやる人は減る
最後にwxWidgetsは英語の知識とC++のオブジェクト指向がわかってないとできないから挫折する人も多いだろう

とゆとりが言ってみる
0315デフォルトの名無しさん2011/12/07(水) 20:24:22.32
wxWidgets > Qt >>> こえられないかべ >>> GTK
0316デフォルトの名無しさん2011/12/11(日) 22:40:24.44
wxWidgets > Qt なの?
■ このスレッドは過去ログ倉庫に格納されています