1 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:49:20 ] クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)についてのスレ。 本家 www.wxwidgets.org/ wxWindows日本語プロジェクト wxwindowsjp.sourceforge.jp/ Let's wxWidgets dot-gray.s33.xrea.com/ wxWindowsで始めるC++ GUIプログラミング www.h3.dion.ne.jp/~k5_n/wxwin/ wxWidgets でクロスプラットフォーム GUIアプリを作ろう 0xcc.net/pub/uu-2004-08/
669 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:04:00 ] >>667 環境を書かないと。OSもコンパイラもバージョンも何も書いてないんじゃ...
670 名前:667 mailto:sage [2009/10/25(日) 15:33:48 ] >>669 失礼しました。WindowsXP SP3 / ATOK2008 です。 RapidSVN 0.12.0 のリリース物件なのでコンパイラはちょっとわからないですが、 バージョン情報には wxWidgets 2.8.9 とあります。 Audacity 1.2.5 (wxWindows 2.4.2) の設定ダイアログでも同じことが起きています。
671 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:43:14 ] ATOK2008
672 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:04:43 ] >>667 IME関係なくESCだけ押してみたけどDialog閉じないよ 自分で書いたコードでなんか拾ってるんじゃないの?
673 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:06:11 ] ・何がしたいのか ・現状どうなっているのか ・それに対する自分の意見 ・自分の環境は何なのか(OS,CPU,GPU) ・IMEを他のものにして同じ症状があるのかどうか、ないならそのIMEは何なのか。 ・可能ならサンプルをアップローダーに。 このくらいは質問するなら情報として欲しいわ。
674 名前:667 mailto:sage [2009/10/25(日) 19:02:54 ] >671 MS IME 2002 でも同じでした。 Off の状態でも同じ動作をしますが、これは開発者が意図したものだと思います。 >672 ESC キーでダイアログが閉じるのは wxDialog の標準的な動きではないという ことですか? このへんを追っかけてみるとCommitDlgがキーボードのイベントを拾っている所は 見つけられなかったんですが、どうでしょうか。 ttp://rapidsvn.tigris.org/svn/rapidsvn/trunk/src/commit_dlg.cpp ttp://rapidsvn.tigris.org/svn/rapidsvn/trunk/src/rapidsvn_generated.cpp >673 >何がしたいのか コミッターでも何でもないですが、RapidSVN で上述のような現象が起きて不便 なので、パッチを投げたいです。
675 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:39:58 ] キャンセルボタンを貼り付けてなければ閉じなかった デフォルトボタンが拾ってると思う
676 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 10:52:28 ] >>658 static link で作ればいいと思うよ。 リリース版を、マルチスレッド/DLL じゃなくて、マルチスレッド(/MT)にする。
677 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 10:55:24 ] >>674 ESCでダイアログが閉じるのはWindowsの基本的な動作。 >>675 が言うとおり、キャンセルボタン(wxID_CANCEL だっけ?)があるとそうなる。 回避したいのであれば、ボタンを標準じゃなくて、自分でwxButtonで作って、 適当な ID を割り振ればいいんじゃないかな?
678 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:27:10 ] なるほど、未確定中にESC押すと入力文字が消え、その後再度ESC押すとダイアログが閉じるのが 普通の動作だが、RapidSVNは未確定文字のキャンセルとダイアログのクローズが同時に起こるな。
679 名前:658 mailto:sage [2009/10/26(月) 14:56:45 ] >>676 返信ありがとうございます。 マルチスレッド(/MT)でコンパイルだと一筋縄でいかないようで、 LIBCMT.libを無視するように設定したりしたら、エラーが減ったんですが、最後、 1>リンクしています... 1>xxx.obj : error LNK2001: 外部シンボル ""public: void __thiscall wxStringData::Free(void)" (?Free@wxStringData@@QAEXXZ)" は未解決です。 1>E:\Documents and Settings\xxx\My Documents\Visual Studio 2008\Projects\morphingpot_v1a\Release\xxx.exe : fatal error LNK1120: 外部参照 1 が未解決です。 1>ビルドログは "file://e:\Documents and Settings\xxx\My Documents\Visual Studio 2008\Projects\xxx\xxx\Release\BuildLog.htm" に保存されました。 1>xxx - エラー 2、警告 0 のエラーが対処できません。 コンパイルしているのは、サンプルでOpenGLを使ってるプログラム、penginをベースに変更したものです。 しかし、一番簡単なサンプル、minimalでもこのエラーは発生するみたいです。
680 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 15:39:40 ] >>679 string.cpp 150行目 #if defined(__VISUALC__) && defined(_MT) && !defined(_DLL) # pragma message (__FILE__ ": building with Multithreaded non DLL runtime has a performance impact on wxString!") void wxStringData::Free() { free(this); } #endif ってなってるから、DLLだとうまくいかないけどstaticリンクなら大丈夫なはず なんか間違ってない?
681 名前:658 mailto:sage [2009/10/26(月) 18:07:00 ] >>680 またも返信ありがとうございます。 あれからいろいろありました。 まず、レスについてですが、stringのソースはその通りでした。 それから、staticリンクというのがよくわからないので、 どうすれば良いかよくわからないです。 それと、一応解決しました。 マルチスレッドDLLでコンパイルしたものの、Releaseファイルの中で、 wx_dll.dspをビルドした時に出てきた、 C:\wxWidgets-2.8.10\lib\vc_dllにあるdllファイルを入れたら、 一応動きました。 なんかもう今はとりあえず動けば良いのでこれで良いです。
682 名前:667 mailto:sage [2009/10/27(火) 01:08:50 ] >675 >677 ESCでID_CANCEL,ENTERでID_OKの動作になるのはWindowsの仕様なんですね。 >678 samples/dialogsの[Entry dialogs][Text entry]で再現しました。(2.8.10 w/ VC2005) textctrl.cpp の OnKeyDown, OnChar, MSWShouldPreProcessMessage window.cpp の MSWProcessMessage, MSWShouldPreProcessMessage には ESC(IME on/off とも)の入力が飛んでこないようです。 どこなら引っ掛けられますかね?
683 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:37:38 ] >>681 それだと MSVCRT(のDLL) がない環境で動かないかも? /MT で使う場合は wxWidgets のライブラリも /MT でコンパイルしないと駄目だけどやった?
684 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:39:56 ] >>682 確かダイアログの場合は特殊で ESC を雄と WM_COMMAND の ID_CANCEL が 飛んでくるんじゃなかったっけ? wxWidgets の場合は…なんだっけ、EVT_? マクロを使うんだったかな?
685 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:42:25 ] >>682 IsDialogMessage()あたりだろうと探してたりしてみたけど、結局同じwindow.cppにある キーボードフックからESCを検出して独自にIDCANCEL送ってるわ。 フック周りをIMEを意識した作りに直さないと無理そう。
686 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:46:10 ] 一応送ってるとこ書いとくけど、dlgcmn.cppのwxDialogBase::OnCharHook()で呼んでる EmulateButtonClickIfPresent(wxID_CANCEL)ね。
687 名前:667 mailto:sage [2009/10/27(火) 13:17:31 ] みなさんありがとうございます。FEP の On/Off で SetEscapeId() を かけたら良さそうな気がした(まだ試してない)んですが、msw 以下の ソースでも wx のヘッダばかり include してますよね。 仮に Imm 系の API を呼ぶようなパッチが作れたとして、wx の本家には 受け入れられないものですか?
688 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:42:48 ] 各OS固有の部分はどうする?
689 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 14:54:57 ] あんまり場当たり的なことはよしたほうが・・・ とりあえず、実験的なコードだけどwindow.cppのwxKeyboardHook()の先頭で HWND hWnd = GetFocus(); HIMC hIMC = ImmGetContext(hWnd); BOOL immOpen = FALSE; if (hIMC) { if (ImmGetOpenStatus(hIMC)) { int size = ImmGetCompositionString(hIMC, GCS_COMPREADSTR, NULL, 0); immOpen = (size > 0); } ImmReleaseContext(hWnd, hIMC); } とやって、immOpenがTRUEなら既存のルーチン、FALSEならそのままCallNextHookEx() 呼んだら希望の動きはしたよ。 でもまあ、imm32.libのリンクがいるし、この部分もLoadLibrary()+GetProcAddress()にして リンク不要にしたらいいかもね。window.cppはWindows固有のコードみたいだしね。
690 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:05:00 ] おっとミス、TRUEとFALSE逆ね、まあわかると思うけど。
691 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:53:57 ] つまり EURT と ESLAF が正解。
692 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 16:59:38 ] >>691 暇人乙
693 名前:658 mailto:sage [2009/10/27(火) 18:17:38 ] >>683 一応やったけど、違うエラーがいっぱい出てきたので、 よくわかりませんでした。
694 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 10:49:43 ] >>693 違うエラーってどんなのよ。 VC++使ってんだよね? 手順説明すると、Releaseの構成を使うとしたらwxのプロジェクト開いた状態で、 ビルドメニューの構成マネージャ開いてアクティブソリューション構成のとこから 新規作成を選択、名前をMT Release とかにして、設定のコピー元をReleaseにしてOK押して MT Releaseが選択されてる状態を確認したら、プロジェクトをシフトクリック等で全部選択して 右クリックでプロパティを出して、構成プロパティのC/C++のコード生成のランタイムライブラリを マルチスレッド(/MT)にしてOK その後ソリューションのビルドすりゃlibができるよ。
695 名前:デフォルトの名無しさん [2009/10/28(水) 14:28:15 ] Adobe Source Librariesって使ってる人いる? stlab.adobe.com/ ちゃんと見てないけど、これってwxWidgetsの代わりになるもんなのかどうだろう?
696 名前:658 mailto:sage [2009/10/29(木) 16:38:29 ] >>694 何処にも書いてなかった手順ありがとうございます。 しかしですが、 手順どおりやって、 サンプルプログラムminimalをマルチスレッドでコンパイルしたら、 1>wxbase28.lib(dir.obj) : error LNK2001: 外部シンボル ""void __cdecl operator delete(void *)" (??3@YAXPAX@Z)" は未解決です。 とか 1>wxbase28.lib(filefn.obj) : error LNK2019: 未解決の外部シンボル _strstr が関数 "public: __thiscall wxFile::~wxFile(void)" (??1wxFile@@QAE@XZ) で参照されました。 とかのエラーが 合計1740個出てきて、? でした。 前に色々いじったのが悪かった可能性がありますが・・・
697 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:47:37 ] >>696 すべての規定ライブラリの無視(/NODEFAULTLIB)を「はい」にしてないか? いいえにしとけ
698 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 23:35:03 ] C++で初めてWxWidgetsを使ってプログラム書いてみています。 複数行のwxTextCtrlに、複数行の文を書いた状態で、GetLineText(0)のようにして、 任意の1行を取り出して、それをそのまま、wxMessageDialogでダイアログ表示させているのですが、 この1行が、半角のアルファベットの時などはきちんと1行全体が表示されるのですが、 この1行が、4文字以上の日本語の場合は、最後の文字だけが欠けて表示されてしまいます。 (例:あいう→あいう、あいうえ→あいう、あいうえお→あいうえ) C++のほうも初心者ですのでどこか間違っているのかもしれませんが、 解決方法をご存知の方が居られましたら、教えていただけませんでしょうか。お願いします。
699 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 03:15:07 ] ソース貼れ
700 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 10:37:03 ] すみません。本当に質問そのままでしたのでソースを書きませんでした。失礼しました。 尚、開発環境は、Visual C++ 2008 Express Editionを使用しています。 wxWidgetsのバージョンは、2.8.10です。 以下、再現できるソースです。宜しくお願いします。 #include "wx/wx.h" #include "wx/msgdlg.h" class Test : public wxApp{ public: virtual bool OnInit(); }; IMPLEMENT_APP(Test) bool Test::OnInit(){ wxFrame *mainf = new wxFrame(NULL,-1,wxT("サンプル"),wxPoint(-1,-1),wxSize(300,250),wxCLOSE_BOX | wxSYSTEM_MENU | wxCAPTION); mainf->Show(TRUE); wxTextCtrl *inp = new wxTextCtrl(mainf,-1,wxT("あいうえお"),wxPoint(0,0),wxSize(-1,-1),wxTE_MULTILINE,wxValidator(),wxT("Form0")); wxMessageDialog *d = new wxMessageDialog(NULL,inp->GetLineText(0),wxT("サンプル"),wxOK,wxPoint(-1,-1)); d->ShowModal(); return TRUE; }
701 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 11:56:49 ] 見てみた。 EM_LINELENGTHがマルチバイトの文字でも文字数を返すのに バイト数で確保してるせいだね。 あいうえお→5にNULL文字1+長さ指定のための2バイト確保で8バイト分しか用意してないから 「あいうえ」になるみたい。
702 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 12:19:22 ] なんか状況によるみたい、ググってもデバッグ環境での違いとかよくわからん。 UNICODE文字セットだとうちでは問題でないけど、どうかな? manifest書けばいいのかもしれないが。
703 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 13:22:08 ] >>701 ありがとうございます。そういう原因でしたか。 素人なりに、EM_LINELENGTHまわりの処理をしているようなコードがないかと考え、 wxWidgetsのファイルを探したのですが、よくわかりませんでした・・・。 GetLineTextを使うのを諦めて、他に違う方法を考えるしか無いでしょうか?
704 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 14:31:27 ] ファイルの場所は、こないだ出たwindow.cppと同じくsrc/msw/にあるtextctrl.cppね。 XPの途中(SP2以降)から仕様変更ってほんまかいな。 うちで試したのはVista64で、たしかに文字数が返ってきてた。 そういやimm〜もLibのリンク不要版書いたけど、見たい人いるかなあ。
705 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 15:07:19 ] UNICODE版に汁
706 名前:デフォルトの名無しさん mailto:sage [2009/11/01(日) 15:57:38 ] >>705 アドバイスありがとうございます。 setup.hで、wxUSE_UNICODEを1にしてビルドしたところ解決しました。 これでwxWidgetsの内部処理がUNICODEになったと考えて良いのでしょうか?
707 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 08:42:01 ] zetcode.com/wxpython/
708 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 11:31:25 ] zetcode.com/tutorials/pyqt4/
709 名前:デフォルトの名無しさん mailto:sage [2009/11/02(月) 13:55:43 ] >>706 そうだけどサロゲートペアには対応してないっぽい
710 名前:658 mailto:sage [2009/11/02(月) 15:10:21 ] >>697 久しぶりにプログラミング再開しました。 できました。ありがとうございます。 すべての規定ライブラリの無視(/NODEFAULTLIB)は いいえのままでしたが、 何かとごっちゃになって、無視するライブラリにLIBCMT.libとかがありました。 とりあえず、できた奴を他のパソで起動してみます。
711 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 22:57:11 ] どうも。wxWidgets2.8.10、Unicnde Buildを使っているのですが、ShiftJIS->Unicode、Unicode->ShiftJISを一発でするにはどうするばいいですか? どうもEncodingConverterクラスはchar/wcharでの変換しか想定していないようなのです。(wxStringを返すことも出来るようなのですが、実際にやると実行時にエラーになりますorz)
712 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 23:11:52 ] Linux版使ってるひと?
713 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 00:06:11 ] >>712 実行時環境を書き忘れていました。実行時環境はWindowsXP SP3です。 具体的なエラー内容は、WXDEBUGをdefineしてビルドするとwxAssertが働いて、wxEncodeConverter::Init()を使用前に呼び出しているにも関わらず「Init()で初期化してください」と表示されるのです。(リリースビルドでも失敗します。)
714 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 00:29:22 ] >>713 俺はWIN32 APIで変換してるよ。手順がチトややこしいので、無名名前空間内に変換用の関数を 書いたヘッダファイルを用意して使ってる。細かい方法は仕事場に行かないと書けないので、 明日にでも...
715 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 01:47:45 ] WCHAR *SJIS2WCS(string sjis) { if(sjis == "") return NULL; int wlen = MultiByteToWideChar(CP_ACP, 0, sjis.c_str(), -1, NULL, 0); WCHAR *wbuf = new WCHAR[wlen + 1]; if(wbuf == NULL) return NULL; *wbuf = L'\0'; if(MultiByteToWideChar(CP_ACP, 0, sjis.c_str(), -1, wbuf, wlen) <= 0){ delete [] wbuf; return NULL; } return wbuf; } string WCS2SJIS(WCHAR *wbuf) { if(wbuf == NULL || wbuf[0] == L'\0') return ""; int slen = WideCharToMultiByte(CP_ACP, 0, wbuf, -1, NULL, 0, NULL, NULL); char *sbuf = (char *)_malloca((slen + 1) * sizeof(char)); if(sbuf == NULL) return ""; *sbuf = '\0'; if(WideCharToMultiByte(CP_ACP, 0, wbuf, -1, sbuf, slen, NULL, NULL) <= 0) return ""; sbuf[slen] = '\0'; return sbuf; }
716 名前:714 mailto:sage [2009/11/04(水) 09:51:54 ] おぉ,先に書いてくれましたね。私の使っているコードも殆ど同じ。 一旦,必要なバッファの長さを取得してからもう一度同じ関数で変換する必要があるのがミソ。 C++的には >>715 の関数をstaticな大域関数にするのではなく, namespace { WCHAR* SJIS2WCS(string sjis) { //中身 } } のように無名名前空間に入れたヘッダファイルを用意して,この関数を利用するソースモジュール からインクルードして使うのが良いようです(参考書なんかによく書いてある)。
717 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 15:39:45 ] >>716 ありがとうございました。
718 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 21:13:49 ] >>716 ヘッダファイルに関数の中身まで書くの抵抗あるんだけど C++だと書いて良いというかそういうもんなの?
719 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:38:43 ] >718 翻訳単位毎に実体ができちゃうから抵抗があるというのは正しい感覚だと思われ。 ヘッダをインクルードしただけで使いたいってんなら自分なら inline にしておくかな。
720 名前:716 [2009/11/04(水) 23:38:45 ] >>719 > 翻訳単位毎に実体ができちゃうから抵抗があるというのは正しい感覚だと思われ。 > ヘッダをインクルードしただけで使いたいってんなら自分なら inline にしておくかな。 おっしゃる通りで... 無名名前空間でヘッダファイル内に定義して、それを異なる翻訳単位で複数使うと、 中身が同じオブジェクトファイルが複数できてしまうよね。 異なる翻訳単位でも共通に使えるようにするのなら、コード効率を考えなければinlineに するのが良いだろうし、コード効率を重視するのならシングルトンパターンでも使って、 実体が一つしかできないようにしてクラスにするのが良いと思われ。 昔のC流でグローバルな関数にするのが一番簡単だったりして...
721 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 05:33:21 ] inline にしておけば翻訳単位ごとに実体ができようが リンク時に1つにまとめられるぜ
722 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 06:16:24 ] 多分、最適化のこともインラインのことも勘違いしてるんだろうね。 インライン展開とは、関数を実行したのと同じ「意味」になる処理を呼び出し側に埋め込んで 関数呼び出しのコストを無くすことであって、 「意味」を変えないためには>>526 のようなことが必要になる。 これは最低限の自分の存在理由を満たしているだけであって、「最適化」などではない。 一方、彼の考えるインライン展開は、引数として渡した「記述」を切り貼りして コードの姿を組み立てて、それを呼び出し元に貼り付ける、というような物らしい。 でも、それはマクロがやってることだ。 マクロといえば、簡易的なLisp処理系を作って、強力と名高いLispのマクロを実装してみると、 このへん勉強になるかもね。 Lispの言葉でいうなら、C++の関数は「引数はすべて評価してから関数に渡される」。 つまり f(g(), h());の時、fが受け取る(そして扱う)のは「g()の戻り値」と「h()の戻り値」。 だからインライン展開するにあたって、>>526 のようにすることでそれを実現する。 それに対して、Lispのマクロは「引数を評価せずに渡し、戻り値で呼び出し側を置き換える」。 こっちが彼の考えるインライン展開に近い。
723 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 06:40:41 ] ??? 526 :デフォルトの名無しさん [sage] :2009/10/06(火) 21:04:39 no problem
724 名前:716 mailto:sage [2009/11/05(木) 08:30:56 ] >>722 そもそも誰に対するレス? アンカーも間違ってるので,言っていることがイマイチよくわからん。
725 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 10:30:25 ] >>721 > inline にしておけば翻訳単位ごとに実体ができようが > リンク時に1つにまとめられるぜ それはないだろう。 もうしそうだとすると、inline関数の呼び出し時に、通常関数の呼び出しと同じように 呼び出しアドレスや引数がスタックに積まれることになってオーバーヘッドが大きく なってしまうから、inline関数の意味がなくなってしまう。 そもそもその話の出典はどこ?
726 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 13:15:10 ] pc12.2ch.net/test/read.cgi/tech/1231640024/
727 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 14:20:58 ] >>721 , >>726 なぁんだ、>>722 はSTLスレのコピペだったのか。 (STLスレのinlineの話は長すぎて読みきれん!) で、>>721 だけど、inline関数の中から呼び出される関数の実体は一つにまとめられる と言いたいのかな?それともコンパイラがインライン展開できなかったときは一つに まとめられるという話かな? ANSI C++規格書の7.1.2の2と4にそのあたりのことが書いてあるけど、俺の英語力では 「inline関数への呼び出しはリンク時に一つにまとめられる」とは読めないなぁ。 仮にまとめられるとすると、スタックを使わないでどうやってその関数を呼び出すの? 「inline関数を使うと、スタックによる関数呼び出し手続きを省くことができるので、 オーバーヘッドを省くことが出来る」と、多くの参考書等にも書いてあると思うが。
728 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 15:23:16 ] レジスタ渡しで呼ばれてるんだろうなw
729 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 15:59:45 ] それは最早呼び出し規約(fastcall)の話であってinlineじゃないな…w つか、wxWidgetsのスレでやる話なんだろうか
730 名前:デフォルトの名無しさん mailto:sage [2009/11/05(木) 16:03:57 ] >>728 wが付いてるから冗談だということで... >>729 んだね。スマソ
731 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 15:50:36 ] wxWidgets用のGUIビルダーやRADツールで、カスタムウィジット(例えばwxCodeに登録されているウィジット)を 登録して、ペタポトできるようにする仕組みを持ってるものってある? あったら具体的に教えてもらえると嬉しい。
732 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:14:35 ] XRCed
733 名前:731 mailto:sage [2009/11/08(日) 22:45:41 ] >>732 サンクス。XRCedリソースエディタとしてC++用にも使えるんですよね。 まだ試してないんですが、やってみます。
734 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 13:20:51 ] XRCed使ってみた。巷で言われる「癖のある使い勝手」はsizerベースであることを考えれば オレは気にならないけど,イベントハンドラの名前すら記述できないし,xrcしか出力できない。 wxrc使っても,これじゃ結局イベントハンドラそのものと,イベントとイベントハンドラを接続 するコードは手書きするしかないんじゃないの? オレには向いてないみたい。
735 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:27:47 ] すいません・・・ 今、wxStringの文字列を、C言語のchar型に変換する方法を探ってるのですが、 なかなか見つかりません・・・ static char *C文字列; で宣言したのを、 C文字列 = wx文字列(wxConvUTF8); とやったら、 1>xxx.cpp(562) : error C2440: '=' : 'const wxChar *' から 'char *' に変換できません。 1> 変換で修飾子が失われます。 と言われた所です。
736 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 18:56:13 ] そもそもconstを非constに暗黙の変換はできない C言語(C++ですらない)の教科書に当たるか const_castでググるべし
737 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:59:45 ] テキストボックスでRead Onlyなのに日本語入力だと普通に書き換えられるのは仕様なの?
738 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:36:34 ] >>735 c_str()
739 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:11:36 ] >>735 Unicodeビルドか?Ansiビルドか? 話はそこからだ。
740 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 04:25:02 ] overviewsの wxMBConv classes overview, Unicode support in wxWidgets, それから wx/strconv.h あたりを読むよろし。
741 名前:735 mailto:sage [2009/11/10(火) 17:11:59 ] const char 変換物; 変換物 = 変換元.c_str(); char *変換物 = const_cast<char*>(変換物); ってやれば、とりあえずコンパイルは通りました。 ありがとうございます。 const charでやっといて、const付きで変換して、 あとではずすって感じですね。 んで、今度は文字コードが上手くいってないんですが・・・ コンパイルはVC++で、文字セット「設定なし」です。 一体どうすれば・・・
742 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 17:25:42 ] どういうコードでどういうデータを使ったらどううまくいかないのさ
743 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 22:36:10 ] >>741 char *変換物 = const_cast<char*>(変換物); 変換元が無くなったら死ぬよね
744 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 00:22:46 ] >>741 質問するならもっと詳しく書け。 そんな質問じゃエスパーが現れるまで誰も答えられん。
745 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 03:23:39 ] ただの愚痴だな 質問ですらない
746 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 10:37:13 ] >>741 コンパイル通ればいいてものじゃないでしょ。 char *p = strdup(unicode_string.c_str()); とでもすればいいのに。 あと、文字セットは Unicode か MBCS(マルチバイト文字) じゃなきゃ駄目だと思うよ。 wxWidgets 使うなら Unicode でがんばって。
747 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 10:51:51 ] みんな wstring って使ってる?
748 名前:デフォルトの名無しさん [2009/11/11(水) 16:12:34 ] wxWidgetsは、どう発音するの? ダブリュ・エックス・ウィジッツ? 既出かもしれないけど教えて。
749 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 16:36:55 ] 日本人相手なら普通はダブルエックス・ウィジェッツ でいいんじゃね?
750 名前:デフォルトの名無しさん [2009/11/11(水) 16:42:32 ] >>749 ありがとう もしかしたら、ウィックスウィジェッツとか発音するのかと思ってた。
751 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 12:45:23 ] >>748 www.youtube.com/watch?v=xiKoaXobwk8 この00:09の所でダブリュ・エックス・ウィジッツと発音してるね。
752 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 16:47:45 ] 2.9.0になって中身がだいぶ変わったな 今までのがビルド通らないし、動きもしない・・・ バグじゃなくて仕様変更だからしょうがないんだけど。
753 名前:735 mailto:sage [2009/11/16(月) 14:46:14 ] 解決しました。ありがとうございます。
754 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 10:37:38 ] Visual C++ 2008 Express EditionでwxWidgets2.8.9を使用しているのですが、 wxURLを使おうとすると、リンクするときにどうしてもエラーになってしまいます。 (そもそも、wxURLを書いただけでエラーになります。 wxURL以外は幾つかしか使っていないのですが、普通にうまく動きます。) test.obj : error LNK2001: 外部シンボル ""public: virtual __thiscall wxURL::~wxURL(void)" (??1wxURL@@UAE@XZ)" は未解決です。 test.obj : error LNK2001: 外部シンボル ""public: __thiscall wxURL::wxURL(class wxString const &)" (??0wxURL@@QAE@ABVwxString@@@Z)" は未解決です。 ****\****.exe : fatal error LNK1120: 外部参照 2 が未解決です。 初心者で、解決しようにも原因さえわからないのですが、 アドバイスを宜しくお願いします。 以下、再現できるコードです: #include "wx/wx.h" #include "wx/url.h" class MyApp : public wxApp{ public: virtual bool OnInit(); }; IMPLEMENT_APP(MyApp) bool MyApp::OnInit(){ wxURL url(_("example.com/ ")); return TRUE; }
755 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 11:40:44 ] >>754 普通に通るけど、、、ライブラリは自分でコンパイルしたやつ? バイナリ使ったのならどれかな?
756 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 13:21:44 ] >>755 ありがとうございます。結構前に入れたものなのでよく覚えていないのですが、 wxMSW-2.8.9-Setup.exeをダウンロードしてインストールし、 build\msw\wx.dswを、VC++ 2008 Expressで開いて、「ソリューションのビルド」をしたものだと思います。
757 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 13:35:02 ] >>755 すみません・・・。 freepg.fc2web.com/cpp/topic_wx_vc.html をなどを参考にして環境を構築していたのですが、 自分のPCにある、lib\vc_libを見て、「追加の依存ファイル」に無いファイルがあることに気づき、 とりあえずwxURLと関係のありそうな、wxbase28_net.libがありませんでしたので、 それを、プロジェクトのプロパティで、追加の依存ファイルに追加したところ、 エラーが出ずに、ビルドができました。とりあえずエラーは出ないようになったので先に進めます。 初心者の質問につきあっていただき、ありがとうございました。感謝しています。
758 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:02:57 ] 関係ないけど 追加の依存ファイルの入力枠って なんであんなに使いづらいんだろう
759 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:05:11 ] 使いづらいよねw #pragma comment使えってことなのかなあ。
760 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 14:41:33 ] includeパスもlibパスも使えねー 嫌がらせだろあれはw
761 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:13:55 ] >wxDev-C++ をインスコしたら、 >C:\Program Files\Dev-Cpp フォルダに、 vcl60.bplとかrtl60.bplがあるみたいなんだけど、 これってC++ Buider か何か?
762 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:19:04 ] うん
763 名前:761 mailto:sage [2009/12/02(水) 16:28:52 ] 嬉しいけど、 C++ Builder を購入してる自分的には、 2種類のソフトと思ってたのが実は1種類みたいに思えて、 損した気分w
764 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 16:51:31 ] えっ
765 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 17:10:36 ] えっ
766 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 17:43:44 ] それはあれだぞ WindowsのゲームはDirectX使ってるから実は1種類だ!! って言ってるのとかわらんぞ・・・?
767 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 17:51:31 ] それじゃドズ1種類じゃね? 他に、ウィィとかP$3買えば3種類
768 名前:デフォルトの名無しさん [2009/12/03(木) 11:43:52 ] wxwidgetsのデザイナ入ってるIDE、codeblocksとかwxdevとかで デバッグ機能を使って、STLのvectorとかlist使った配列の中身見れるやつある?
769 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 21:37:55 ] win32api と wxWidgets の違いって何? wxWidgets でクロスプラットフォーム GUIアプリを作ろう 0xcc.net/pub/uu-2004-08/ ↑を見るとwin32をラッパしているだけ、と書いてあるのだが windows限定で開発している俺には何もメリットない認識でおk?
770 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 23:25:16 ] MFCで開発してる奴が少ない労力でLinuxやMacで動かせるようになる点がメリット。 ということは、どういうことか分かるよな?
771 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:27:34 ] 文字列扱いやすいし,windowsだと冗長になってしまうコードも 簡潔に書けるってのもいいんじゃない?
772 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:33:40 ] 文字列扱いやすいなんてのはSTLやMFC使えば一緒だよ
773 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 00:10:00 ] そう?MFCは使ってないからなんとも言えないけど STLやQtとか他のライブラリと比べると操作関数が豊富だったと思う 所詮好みの問題だけどさ
774 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 01:42:25 ] 詳しい文書があり、またPythonで使えるのも良い。 GUIの挙動とか確認したい時に一々コンパイルせずともPythonでトライアンドエラー出来るのは楽。
775 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 01:10:00 ] SSLのソケットは簡単に作れないですかね。 クライアント・サーバどちらも使いたいんですが。
776 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 02:46:55 ] wxssl.sourceforge.net/ ちなみに中身はまったくみていない
777 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 04:43:06 ] 求)リードプログラマー か・・・
778 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 07:28:10 ] >>769 Code::BocksのwxSmithやwxFormBuildeや、wxDev-C++みたいな ポトペタRADツールを使うと、MFCよりサクサク開発できる。 MFCは書かなきゃならないコードが多すぎる。
779 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 02:33:04 ] >>769 何もメリットないってことはないけど、俺ならクロスプラットフォーム でもないのにあえてwxWidgetsを選ぶことはないな。
780 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 03:26:04 ] Win32API とか MFC のダサさを回避したいときには 敢えて wxWidgets や Qt4 とか使うのは間違いではないよ
781 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 12:43:16 ] 同感。C++ Builderは既に死に体だし。 > 敢えて wxWidgets や Qt4 とか使うのは間違いではないよ 最近の流れだと wxWidgets は Qt に比べて分が悪いね。 Qt より単純で好きだったんだけど。
782 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 13:20:52 ] wxWidgetsは、気に入らない部分を書き換えてビルドできちゃうところがいい
783 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 16:24:55 ] スタティックリンクも出来るし
784 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:03:56 ] 3.0まだぁー?
785 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 00:06:43 ] >>779 で、何選ぶの?
786 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 12:08:16 ] >>785 この流れでは言いにくいけど俺はC++Builder。
787 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 12:58:26 ] 俺は逆にC++ Builderから逃げようとしている。 Borland⇒CordGear⇒Embarcaderoと母体が変わるうちにどんどん品質低下。 バグを充分に修正しないまま次期バージョンを発売してしまう。 メチャクチャな翻訳やリンク切れ満載のヘルプの酷さは見るに耐えない。 以前は沢山カキコのあったMLも超閑古鳥。 問い合わせしても自分で答えずに一般人のHPのURLをメールに貼って 「ここに情報があります」と言うヒドいサポート。 最新バージョンへの優待バージョンアップも申し込みが少なかったらしく, 昨年末までだった予定を一ヶ月延長する情けなさ。 トライアル版使ってみれば,バージョンアップする気がなくなるw Windows限定なら使いやすくて仕事が速く出来る最高の製品だった はずなのに,こんな製品に誰がした! QtをNOKIAが買ったように,どこかの大きな会社が買ってくれんかな。 wxWidgetsもどこかがバックに付かんかな。
788 名前:デフォルトの名無しさん mailto:sage [2010/01/26(火) 14:47:56 ] 同意
789 名前:質問 mailto:sage [2010/02/05(金) 12:50:49 ] wxPythonを使っているのですが、 wx.media.MediaCtrlでマウスクリックのイベントから関数をコールバックすることはできないのでしょうか? もしできないのでしたら、親ウィジェットでマウスクリックのイベントを受け取ることはできるのでしょうか?
790 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 15:54:21 ] >>787 どこもバックに付かないから良いんじゃまいか
791 名前:質問 mailto:sage [2010/02/06(土) 00:14:07 ] すみません、解決しました。
792 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:38:58 ] wxString strを cout << str << endl; という風に出力したいんだけど、コンソール入出力用のストリームってある?
793 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:42:12 ] ここには人はいませんよ。ばいばいさるさん。
794 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 18:35:55 ] よく分かってないけど自己解決
795 名前:デフォルトの名無しさん [2010/02/07(日) 00:44:24 ] VC++2008EE+wxに越してきたのですがUnicode Releaseってのがあるのですが やっぱりこっちの方がいいんですかね?
796 名前:デフォルトの名無しさん [2010/02/08(月) 00:21:46 ] あんまり人いないのかな?
797 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 00:32:22 ] Qtに引越ししつつある
798 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 00:35:47 ] >>796 枯れてきたから使用者が多くても質問者は少ないんだろ。
799 名前:デフォルトの名無しさん [2010/02/08(月) 00:39:46 ] >>797 >>798 そうなのか Qtの方ってOSが搭載してるブラウザコアを組み込んで使えたりするのかな? wxのHTML処理関連は素のHTMLは問題なさそうだけどcssが駄目そうだし
800 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:02:14 ] QtにはWebKitが付いたんだっけ?
801 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:05:52 ] wxの話では盛り上がらないけど Qtの話になると盛り上がるwxスレ
802 名前:デフォルトの名無しさん [2010/02/08(月) 01:07:42 ] Monoで作るというのもあるよ あれだとC#でかけるのでC++の糞構文に悩むこともない ただMSの動きとかもろももろでどうなるかなんだよね
803 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:11:26 ] Qt で書かれたアプリはときどき見かけるけど wx で書かれたのってあまりお目にかからない どんなのがあるの?
804 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:14:24 ] >>803 python製アプリ見ればほとんどwxだよ。
805 名前:デフォルトの名無しさん [2010/02/08(月) 01:25:36 ] 休みを利用してwx関連をいろいろ試したけどGUI関連のツールが微妙だな ネットで調べるとすぐにでてくるwxGladeとかもうね・・・
806 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:35:40 ] まぁ、GUIなんて手で書けばいいし
807 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 03:16:08 ] wx で GUI 独立設計したいなら XRCed がいいよ
808 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 11:11:06 ] >>795 あんまり頻繁に見ていないんだ、ごめんよ。 で、Windows で使うなら UnicodeRelease/UnicodeDebug でいいよ。 むしろそれ以外は気にしてはいけない。 static か DLL かは好みで。