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


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

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

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

ここまで見た
  • 426
  •  
  • 2012/04/30(月) 23:02:22.27
hoshu

ここまで見た
  • 427
  •  
  • 2012/05/07(月) 23:39:02.10
wxFormBuilderで出力したコードで日本語が文字化けすると思ったら
BOMなしUTF8とVSの問題だった

ここまで見た
  • 428
  •  
  • 2012/05/19(土) 11:47:34.43
Windows, Linux環境で使えるアプリを作っているのだが
Windowsの場合はバイナリを配布すればいい
Linuxの場合はソース互換だからソースを配布するべきなんだよな?

ここまで見た
  • 429
  • 428
  • 2012/05/19(土) 11:51:05.86
あと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
  •  
  • 2012/06/13(水) 22:49:56.47
EVT_CLOSE に対して Close(True) しても終了出来ません

ここまで見た
  • 431
  •  
  • 2012/06/25(月) 07:17:22.37
http://cametan-001.tumblr.com/post/5864304659/wxpython

ここまで見た
  • 432
  •  
  • 2012/07/04(水) 17:16:02.11
ほす
ttp://www.youtube.com/watch?v=8v52QIP4L9Y


ここまで見た
ここまで見た
  • 434
  •  
  • 2012/07/05(木) 16:30:39.73
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
  •  
  • 2012/07/08(日) 23:42:42.45
>>430
EVT_CLOSEのハンドラの処理では終了処理した後event.Skip(false);
Closeを呼ぶとまたハンドラが呼ばれる

ここまで見た
  • 436
  •  
  • 2012/07/09(月) 07:12:24.08
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
  •  
  • 2012/07/13(金) 19:00:38.12
ソースに
  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
  •  
  • 2012/07/13(金) 20:37:03.69
ヘッダファイルの読み込みかライブラリのリンクを行ってない

VC++なんて捨ててMinGWでやろうぜ!
MinGW + EclipseCDTで環境用意すればいい

ここまで見た
  • 439
  •  
  • 2012/07/13(金) 20:49:50.67
どのライブラリが足りないのか判らないんで
どのライブラリに含まれているかを教えろ

ここまで見た
  • 440
  •  
  • 2012/07/13(金) 21:49:44.49
>103-

ttp://diary.imou.to/~AoiMoe/2004.09/middle.html#2004.09.13

ここまで見た
  • 441
  •  
  • 2012/07/14(土) 23:52:18.18
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
  •  
  • 2012/07/15(日) 11:07:19.04
>>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
  •  
  • 2012/07/15(日) 11:14:03.55
あと細かいことを言うと文字列の宣言を以下のようにしているようだが

wxString str1 = L"まっぎょ";

せっかく用意されているので「wxT」マクロを使った方がいい

wxString str1 = wxT("まっぎょ");

これでどのような環境でも日本語が変数に入れられるはず

ここまで見た
  • 444
  •  
  • 2012/07/15(日) 21:32:47.77
>>442
ありがとうございます。
サンプルをコンパイルして、実行できました。

通常変数と、ポインタ変数ですか。
リンク先を読んで理解します。

すみません、あと一点教えてください。

wxStringは、通常変数? wxArrayStringは、ポインタ変数?を利用しているというころでしょうか?

下記マニュアルをどのように調べればよいのでしょうか?
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx368.htm
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx32.htm



ここまで見た
  • 445
  •  
  • 2012/07/16(月) 05:30:47.00
>>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
  •  
  • 2012/07/16(月) 07:23:17.68
DLLよりもstaticの方が配布サイズ小さくなるな

ここまで見た
  • 447
  •  
  • 2012/07/16(月) 10:56:52.47
逆でわ?

ここまで見た
  • 448
  •  
  • 2012/07/16(月) 11:06:12.02
DLLリンクで作るともちろんexeは小さくなるけど
DLLも一緒に配布するとなるとでかくなるって意味

ここまで見た
  • 449
  •  
  • 2012/07/16(月) 11:08:34.14
そりゃあんたのプログラムの規模が小さいだけでわ?

ここまで見た
  • 450
  •  
  • 2012/07/16(月) 11:12:44.68
いや先入観無しで聞いてくれ
最初はそう思ってたんだが
確かにDLLリンクで作るとexeはめっちゃ小さい
しかし実際そこそこの規模のプログラム書いて
staticで作ってみて出来たexeが
(前者のexeに必要なDLLを合わせたサイズに比べると)
意外と小さい

ここまで見た
  • 451
  •  
  • 2012/07/16(月) 11:15:19.52
exe だけ配布汁!

ここまで見た
  • 452
  •  
  • 2012/07/16(月) 11:22:57.42
そりゃDLLはwxWidgets全部入りだしな

ここまで見た
  • 453
  •  
  • 2012/07/16(月) 12:51:54.82
規模によるとしか言いようがない

ここまで見た
  • 454
  •  
  • 2012/07/16(月) 12:57:22.32
MFC 最強ですねわかります

ここまで見た
  • 455
  •  
  • 2012/07/16(月) 13:25:13.34
DLLはwxWidgetsのシンボル全部入ってるけど、
staticリンクだと本体が使うシンボルだけ.aから
引っ張ってくるんだから、そうなるのは当たり前

ここまで見た
  • 456
  •  
  • 2012/07/16(月) 14:12:18.33
規模によるとしか言いようがない

ここまで見た
  • 457
  •  
  • 2012/07/16(月) 14:13:00.02
DLL ってなんのためにあるんだっけ?

ここまで見た
  • 458
  •  
  • 2012/07/16(月) 14:13:47.36
ワロタ

ここまで見た
  • 459
  •  
  • 2012/07/16(月) 14:34:56.55
wxWidgetsで作ったexeが一個(あるいは少数)しかないときはそうなるのは当たり前。
DLLのメリットが生きるのはOS等のようにexeが無数にあってさらに共通部分(API)が多い場合。
趣味でやってるならSTATICでいいんじゃね?

ここまで見た
  • 460
  •  
  • 2012/07/16(月) 14:56:37.82
めずらしくwxWidgetsスレが伸びている・・・

ここまで見た
  • 461
  •  
  • 2012/07/16(月) 15:55:58.62
規模によるとしか言いようがない

ここまで見た
  • 462
  •  
  • 2012/07/16(月) 15:56:38.27
2.9.4 出たからな

ここまで見た
  • 463
  •  
  • 2012/07/16(月) 16:19:03.02
2.9.4 はまだ Development だよね。

いつ Stable になるんだよ、まったく。

ここまで見た
  • 464
  •  
  • 2012/07/16(月) 16:28:29.73
馬鹿には無理

ここまで見た
  • 465
  •  
  • 2012/07/16(月) 17:57:49.06
馬鹿には無理さんは帰って、どうぞ

ここまで見た
  • 466
  • 437
  • 2012/07/16(月) 19:32:54.08
事故解決しました。
リンカ設定ではディレクトリで vc_dll の方を指定していたのですが、
PreprocessorDefinitions に WXUSINGDLL が抜けていたため、
static link しようとしてシンボル未解決になっていたようです。

ここまで見た
ここまで見た
  • 468
  •  
  • 2012/07/16(月) 19:55:20.02
そうそう。
それです。

ここまで見た
  • 469
  •  
  • 2012/07/17(火) 23:59:29.64
>>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
  •  
  • 2012/07/18(水) 09:07:55.01
全然違うw

C++の初心者用入門本読んで勉強汁

ここまで見た
  • 471
  •  
  • 2012/07/18(水) 13:24:00.41
wxWCharBuffer の使い方が良く判りません。

ここまで見た
  • 472
  •  
  • 2012/07/23(月) 08:38:27.68
過疎

ここまで見た
  • 473
  •  
  • 2012/07/23(月) 13:34:00.85
過疎かあ?

ここまで見た
  • 474
  •  
  • 2012/08/10(金) 14:24:37.30
わからないことがあるので、教えてください。

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
  •  
  • 2012/08/10(金) 14:33:22.20
すいません、リンク先の内容が質問したい内容と同じではありませんでした。

実際は、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
  •  
  • 2012/08/10(金) 14:58:02.41
>>475
MyFrameは多分継承したクラスなので、基底クラスであるwxFrameのコンストラクタを呼び出している。

ここまで見た
  • 477
  •  
  • 2012/08/10(金) 14:59:37.21
あげちゃった・・・。Orz

砂時計アラームタイマー
フリックゾンビ
ここまで見た

★お気に入り追加

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