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/

ここまで見た
  • 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

ここまで見た
  • 478
  •  
  • 2012/08/10(金) 15:15:07.17
>>476

教えてくれてありがとうございます。
継承と基底クラスを調べてみます。


ここまで見た
  • 479
  •  
  • 2012/08/10(金) 16:12:34.61
若き日のヴィドゲンシュタインがよみがえったように


ここまで見た
  • 480
  •  
  • 2012/08/10(金) 16:21:56.40
連結グラフ G=(V,E) と重み d:E->R+が与えられたとき 最小木を求めよ。

ここまで見た
  • 481
  •  
  • 2012/08/14(火) 17:06:28.44
演算子?ではありませぬ

ここまで見た
  • 482
  •  
  • 2012/08/28(火) 18:53:02.77
初期化リストじゃね?

ここまで見た
  • 483
  •  
  • 2012/08/31(金) 17:18:28.13
wxStaticBitmapに透過png画像を指定して描画しても、
透過になってくれてないようなのですが、
単にwx.BITMAP_TYPE_PNGで読んだものを貼るだけじゃ駄目なんでしょうか?

ここまで見た
  • 484
  •  
  • 2012/08/31(金) 18:43:26.98
wxInitAllImageHandlers() の呼び忘れや
png を作成したソフトが原因で正常に透過処理されないとかかなあ
サンプルのimage参考にするといいと思うよ

ここまで見た
  • 485
  •  
  • 2012/08/31(金) 22:09:21.20
wxPython in action の翻訳版が・・・
http://www.slideshare.net/ryanvan/wxpython-in-action


ここまで見た
  • 486
  •  
  • 2012/08/31(金) 23:26:46.41
スライド565ページって、出版じゃないのかー。
それでも俺は原書を選ぶぜ。

ここまで見た
  • 487
  •  
  • 2012/08/31(金) 23:48:10.30
webはスライドだけど
savefileボタン押したら
普通にPDFが落ちて来た

ここまで見た
  • 488
  •  
  • 2012/09/01(土) 02:49:55.50
・wxAuiPaneInfoで、一度設定したCaptionをCaptionVisibleのtrue, falseで切り替えたいけど
なぜか反映されん、なんでだぜ

wx 2.9.4使ってみた

・GTK環境 wx2.8でSetSizer呼んだ後Fit呼ぶと異常終了するバグが2.9.4では直ってた
・同じくGTK環境 wxListctrlでwxLIST_AUTOSIZEしても、自動でカラムの幅が調整されない
(なんかメーリス見たらwxPythonのロビンさんが「まだ直ってないの?」みたいなこと書いてた。誰か直して。)

ここまで見た
  • 489
  •  
  • 2012/09/01(土) 04:53:40.84
GTKは糞

ここまで見た
  • 490
  •  
  • 2012/09/05(水) 19:33:35.92
GTK+ は多段タブも実現できんのだな
WindowsにできてGTKにできんことが結構見えてきた

ミゲルさんもこんなこと書いてるし、Linuxのデスクトップはダメだな
http://www.yamdas.org/column/technique/linuxdesktopj.html

ここまで見た
  • 491
  •  
  • 2012/09/06(木) 09:29:27.19
>>489
またおまえか
巣に帰れ

ここまで見た
  • 492
  •  
  • 2012/09/06(木) 09:57:24.07
何度でも言うよ
欠かさず言うよ
GTKは糞

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

★お気に入り追加

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