-
- 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 しようとしてシンボル未解決になっていたようです。
-
- 467
- 2012/07/16(月) 19:53:09.82
-
つttp://wiki.wxwidgets.org/Microsoft_Visual_C%2B%2B_Guide#Project_properties
-
- 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
またおまえか
巣に帰れ
このページを共有する
おすすめワード