トップページtech
981コメント348KB

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

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん2006/09/09(土) 00:06:30
クロスプラットフォーム GUI ライブラリの wxWidgets (旧 wxWindows)について語りましょう。

本家
 http://www.wxwidgets.org/
wxWindows日本語プロジェクト
 http://wxwindowsjp.sourceforge.jp/
Let's wxWidgets
http://dot-gray.s33.xrea.com/
(*)準備中(*)
http://www.geocities.co.jp/SiliconValley-Cupertino/8526/
wxWindowsで始めるC++ GUIプログラミング
http://www.h3.dion.ne.jp/~k5_n/wxwin/
wxWidgets でクロスプラットフォーム GUIアプリを作ろう
http://namazu.org/~satoru/pub/uu-2004-08/
dW : Linux : wxWindowsの概要
 http://www-6.ibm.com/jp/developerworks/linux/010413/j_l-wxwin.html
SunWorld Online:wxWindows――無名だが成熟したGUIツールキット
 http://www.idg.co.jp/sw/back/200102/20010219_01_report.html
0892デフォルトの名無しさん2008/05/26(月) 12:11:45
wxStringオブジェクトを走査して特定の文字列が何回出てくるか調べたいんですが、それ用の関数ってないですよね??
0893デフォルトの名無しさん2008/05/26(月) 12:24:10
>>891
GLCanvasってレンダリングコンテキストのハンドリングぐらいしかやってないんじゃないかな。それだけならそんなもんじゃないかなぁ。
0894デフォルトの名無しさん2008/05/26(月) 23:56:39
>>892
>それ用の関数ってないですよね??
質問の仕方、心構えが間違ってる。ありませんか?と自然に聞けば良い。
自分が既に調べてみつからなかったんだけど ... ということをアピールして、
しかも、自分って正しいですよね、という雰囲気である。
これでは自分で心を閉ざしているようなものであって、
API レファレンスを読めばみつかる API もみつからない。

というのは別にして、wxString::find(const wxString&,size_t) ではだめなの?
0895デフォルトの名無しさん2008/05/26(月) 23:59:56
なんという紳士
0896デフォルトの名無しさん2008/05/27(火) 00:04:29
>>894の優しさに泣いた!
0897デフォルトの名無しさん2008/05/27(火) 00:28:37
>>894にならほ(ry
08988922008/05/27(火) 02:09:22
レスありがとうございます。

>>質問の仕方、心構えが間違ってる。ありませんか?と自然に聞けば良い。
>>自分が既に調べてみつからなかったんだけど ... ということをアピールして、

う、こういう聞き方、あまりよろしくないのですかね??
単純に「ありませんか??」だとググれと言われてしまうし、かと言って毎回なんか質問書き込む度に既に調べて分からなかったので質問しましたってのは正直億劫だったのでこんな感じの聞き方になっていましたが・・

wxString::Findだと、最初にマッチした部分のインデックスが返ってくるだけですよね??
でもwxString::Cmpとforとif使ってなんとかなったので、質問したこと自体は解決しました。

>API レファレンスを読めばみつかる API もみつからない。
これはなんでですか??
この質問の仕方だとなんでAPIリファレンスに書いてあるAPIも見つからなくなる、のでしょう?
突っ込まれて反論してるのではなく、どういう意味か分からなかったので単純に教えて頂きたいな、ということです。
0899デフォルトの名無しさん2008/05/27(火) 02:25:57
>>898
>毎回なんか質問書き込む度に既に調べて分からなかったので質問しました

答える側になった事を考えれば分かると思うが、これが正解
事前に何を調べて自分としてはどう思っていて何が疑問なのかを丁寧に書く
これしか無いよ
0900デフォルトの名無しさん2008/05/27(火) 02:32:59
>>898
解決したならいいけどCmp()でどんなコードを書いたの?
0901デフォルトの名無しさん2008/05/27(火) 03:13:25
>>898
>wxString::Findだと、最初にマッチした部分のインデックスが返ってくるだけですよね??
この「ですよね??」という聞きかたが良くないです。
自分はこの API は既に知っているけど ... ということをアピールして、
しかも、自分って正しいですよね、という雰囲気である。
これでは自分で心を閉ざしているようなものであって、
この API が使える API であるということを認識出来ない。

自分はこれまで最初にマッチした部分のインデックスが返ってくるだけだと思っていたんだけれど、
相手が wxString::find を言ったということは、実は二つ目以降も返ってくるんではないか?
と謙虚に考えられなくなるわけです。相手に言われたら、
自分を疑って、もういちど自分で API レファレンスを読んでみればわかるはずで、
こうやって小言を言われる必要もなくなるわけです。というのが、
> この質問の仕方だとなんでAPIリファレンスに書いてあるAPIも見つからなくなる、のでしょう?
>突っ込まれて反論してるのではなく、どういう意味か分からなかったので単純に教えて頂きたいな、ということです。
への返答です。
僕は自分自身が、「ですよね?」「じゃないんですか?」と言いたくなったら、
まず自分を疑うことにしています。
その言葉を発した時点で、考えるのを放棄しているからです。

というのはいいとして、wxString::find(const wxString&,size_t) とわざわざ
オーバーロードしてある引数までかいてあるのは何故だとおもいますか?
それはそのバージョンをつかうと、第二変数でどこから調べるかが指定出来るからです。
そうするとそれを繰り返し呼べばいいわけです。
ちなみに find が大文字か小文字かも違います。
http://docs.wxwidgets.org/2.8.6/wx_wxstring.html#wxstringat
をみてください。
0902デフォルトの名無しさん2008/05/27(火) 03:24:20
ためになる話のような気がするから
あとでゆっくり読むぜ
0903デフォルトの名無しさん2008/05/27(火) 03:45:34

   _,,....,,_  _人人人人人人人人人人人人人人人_
-''":::::::::::::`''>   ゆっくりしていってね!!!   <
ヽ::::::::::::::::::::: ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
 |::::::;ノ´ ̄\:::::::::::\_,. -‐ァ     __   _____   ______
 |::::ノ   ヽ、ヽr-r'"´  (.__    ,´ _,, '-´ ̄ ̄`-ゝ 、_ イ、
_,.!イ_  _,.ヘーァ'二ハ二ヽ、へ,_7   'r ´          ヽ、ン、
::::::rー''7コ-‐'"´    ;  ', `ヽ/`7 ,'==─-      -─==', i
r-'ァ'"´/  /! ハ  ハ  !  iヾ_ノ i イ iゝ、イ人レ/_ルヽイ i |
!イ´ ,' | /__,.!/ V 、!__ハ  ,' ,ゝ レリイi (ヒ_]     ヒ_ン ).| .|、i .||
`!  !/レi' (ヒ_]     ヒ_ン レ'i ノ   !Y!""  ,___,   "" 「 !ノ i |
,'  ノ   !'"    ,___,  "' i .レ'    L.',.   ヽ _ン    L」 ノ| .|
 (  ,ハ    ヽ _ン   人!      | ||ヽ、       ,イ| ||イ| /
,.ヘ,)、  )>,、 _____, ,.イ  ハ    レ ル` ー--─ ´ルレ レ´

0904デフォルトの名無しさん2008/05/27(火) 10:02:58
なんか知らんが賢人が降臨したようだな
0905デフォルトの名無しさん2008/05/27(火) 13:52:47
賢人って… >>903 のこと?
0906デフォルトの名無しさん2008/05/27(火) 17:45:13
当たり前だろ
0907デフォルトの名無しさん2008/05/27(火) 19:56:55
馬鹿野郎俺に決まってるだろ
09088922008/05/27(火) 22:50:50
レスありがとうございます。

>ちなみに find が大文字か小文字かも違います。
これに気づいてませんでした。C++互換というやつがあったんですね・・。

>相手が wxString::find を言ったということは、実は二つ目以降も返ってくるんではないか?
これはもちろん考えてます。が、それでも完全に見逃していました。。

wxString::find(const wxString&,size_t) でいけそうです。ありがとうございます。

が・・

>>それ用の関数ってないですよね??
>質問の仕方、心構えが間違ってる。ありませんか?と自然に聞けば良い。
これは分かるんですが・・

>>wxString::Findだと、最初にマッチした部分のインデックスが返ってくるだけですよね??
>この「ですよね??」という聞きかたが良くないです。
これはではどう聞けばよかったんでしょう?
これ以外に聞きようが無い気がするんですが・・
09098922008/05/27(火) 22:55:44
>>900
こんなの書いてました汗

wxString str_wk;
int count;
wxString source = "なんか色々";
int length = sourceのデータ長
for (int i = 0; i < length; i++){
str_wk = source.Mid(i, 6);
if (0 == str_wk.Cmp(wxT("sample"))){
count++;
}
}
0910デフォルトの名無しさん2008/05/27(火) 23:10:59
>>908
ですよね?と聞く前に、wxString のメンバ関数一覧を再確認すればよかったんじゃないかな。たぶん。
0911デフォルトの名無しさん2008/05/27(火) 23:47:43
>>901のエントリについては、何か考えさせられた。

○(調べたけどわかんなかったので)ありませんか?
△(調べずに)ありませんか? … (ググれと言われる)
×ないですよね? … (ないんですよ。そうでしょう?(同意求む)的な感じ)

って感じなのかな。
09128922008/05/27(火) 23:55:56
>>910
再確認して、その上で分からなかった(見逃してた)んです。
なので、言ってしまえば回答に直結するレス頂いてそれでも気づかなかった自分がバカだったってだけの話なのですが汗
0913デフォルトの名無しさん2008/05/28(水) 00:03:07
その人は嫌み言ってるだけだと思うので気にしないでいいと思うよ
まあふと疑問がでてドキュメント見たときに、
そのクラスのあんま関係なさそうだけど他のメソッドもついでに
全部勉強しておいてやろうとかいう感じでやってればスキルもあがるんじゃないでしょうか。
0914デフォルトの名無しさん2008/05/30(金) 10:19:55
これって、64bit対応してるかな?
コンパイラが64bitなら無問題?
0915デフォルトの名無しさん2008/05/30(金) 11:55:45
すくなくとも wxMac は対応してない。なぜなら GUI が Carbon で、それには 64bit 版がないから。
0916デフォルトの名無しさん2008/05/30(金) 12:15:03
え”〜、Carbonは64bitには亡くなるのぉ???

wxCocoaの完成を待つしか無い???
0917デフォルトの名無しさん2008/05/30(金) 12:53:48
>>916
いまんところの Apple の発表は、 Carbon の GUI 部分は 64 bit にしない、Carbon の非 GUi 部分は 64 bit にする、とのことだけど、まあすぐ気の変わる会社だから誰にも分かりません

Qt はもう方針転換して、Cocoa で組みなおしてます。もう Cocoa 64 bit のβ版がでてるはず。

wxMac はメンテナンスはされてるけど、ドキュメントから何から激烈に古いのでこれを機会に wxCocoa を誰か頑張ってくれ。
0918デフォルトの名無しさん2008/05/30(金) 13:03:15
wxGTKはMacでは動かないの?
0919デフォルトの名無しさん2008/05/30(金) 13:10:59
wxGTK は OS X 上で X11 を立ちあげて、そのなかで動くというのは可能
Windows でも cygwin とかでX11 サーバをいれとけば wxGTK も動くというのと同じ状況です
OS X の WindowServer は X11 ではないので。
まあ X11 は標準でついてくるけど。
0920デフォルトの名無しさん2008/05/30(金) 13:49:29
正直 OS X で X11+GTK とか勘弁してくれって感じだ…
0921デフォルトの名無しさん2008/05/30(金) 15:31:32
Mac で Xアプリが動くってのはオマケだね。

クリップボードさえX専用クリップボードだったり、
Windowsの16ビットアプリケーションより連携悪い。
0922デフォルトの名無しさん2008/05/30(金) 16:00:05
wxStreamToTextRedirectorを使っているんですが、
cout << で、マルチバイト文字が化けて表示されてしまいます。

同じような症状の方、また解決方法を分かる方いらっしゃいましたらご教示いただけると嬉しいです。
ちなみにwxMSWをunicodeモードでインストールして使っています。
0923デフォルトの名無しさん2008/05/30(金) 16:03:51
自分の書き込みを何度も読み返すといいよ。
0924デフォルトの名無しさん2008/05/31(土) 16:12:39
Code::Blocksのスレが無いので、ここに書かせてくれ。
Code::Blocksのバグなんだ。興味ない人は無視してくれ。
詳細はチラ裏に書いたので、もし偉い人がいたら、本家にバグ報告してほしい。

ここからチラ裏

日本語のMac OS X上のCode::Blocksで、新規プロジェクトをウィザードで作ろうとすると、「Script compile error」というのが出る。
これは、Code::Blockが、ウィザードを記述してるスクリプト(Squirrel)を読み込むときに、U+005CがU+00A5に変換される(ファイルがShift-JISとして読み込まれる)のが原因。
src/sdk/scriptingmanager.cppの中にある、ScriptingManager::LoadScriptがスクリプトをファイルから読み込む関数っぽいので、その中の、cbReadFileContents(f)をcbReadFileContents(f, wxFONTENCODING_UTF8)に置き換えればいい。
だが、俺は英語ができないし、バグ報告のためのユーザアカウントも持っていないので、せめてここに書くぐらいしかできないorz

ここまでチラ裏
0925デフォルトの名無しさん2008/06/01(日) 10:58:29
OS X 上で、外人さんの作ったソフトで、unicode つかってないので、そのバグがでることって多いよね。TeX 用のソフトでそれではまることがしばしば ...
0926デフォルトの名無しさん2008/06/02(月) 23:48:04
>>924
了解
0927デフォルトの名無しさん2008/06/03(火) 00:10:51
Ubuntu 8.04でwxPythonがシンボル見つからないとかで起動しない。
自分でビルドしようと思ってもコンパイルエラー。swigのバージョンかな?
動かぬなら 動くまで待とう wxPython
0928デフォルトの名無しさん2008/06/03(火) 19:47:07
待ってねーでバグレポート送れよ
0929デフォルトの名無しさん2008/06/04(水) 00:20:54
英語がわからないに1票〜
0930デフォルトの名無しさん2008/06/04(水) 00:55:38
>>928
いや、本家フォーラムではもう話題になってる。日本で話題になって無いからチラ裏してみただけ。
0931デフォルトの名無しさん2008/06/04(水) 00:57:50
なぁ、このフレームワークって人気ないの?
0932デフォルトの名無しさん2008/06/04(水) 02:16:47
>>931
ん?採用してるプロダクトも多いし
コミュニティも活発じゃん。

なんでそんな事を思うのかい?
0933デフォルトの名無しさん2008/06/04(水) 09:00:21
採用しているプロダクトも少ないし
コミュニティも活発じゃないからだろうきっと。
0934デフォルトの名無しさん2008/06/04(水) 10:01:18
Qtに負けてる?
0935デフォルトの名無しさん2008/06/04(水) 12:26:07
>>934
Photoshop Elements、Opera、Google Earth、SkypeなんかがQtだね。
確かにちょっとよさそうだし、有料なんでサポートもしっかりしてそうだけど
wxWidgetsをすでに使ってるんだったら乗り換えるほどではないかな・・
0936デフォルトの名無しさん2008/06/04(水) 12:27:18
あ、そう。
じゃあ乗り換えるのやめる。
0937デフォルトの名無しさん2008/06/04(水) 18:08:03
wxStringに格納されている改行文字を数えるために、for文などと組み合わせて

if(string::npos != mml.find(wxT("\n"), i ,len)){
line_count++;
}

のように書いてみたのですが、改行文字じゃないところまでマッチしてしまいます。
正しい書き方分かる方いらっしゃいましたら教えて頂けると嬉しいです。

環境はWindows wxMSW2.8.7
文字コードはunicodeです。
0938デフォルトの名無しさん2008/06/04(水) 20:03:39
sizerだったかな?
いまいちこの辺の理解ができない。
0939デフォルトの名無しさん2008/06/04(水) 22:02:11
>>937
i はどうやって更新してるの ???
09409372008/06/04(水) 22:27:08
>>939
分かりにくくてすいません。
lenはずっと固定1で、
iは1ループで1ずつ加算していく感じです。

単純に一文字ずつ調べていくように書きました。
あとmmlってのがwxStringオブジェクトです。。
0941デフォルトの名無しさん2008/06/04(水) 23:39:29
阿呆か。第三引数は、この場合第一引数の長さの指定だろう。
http://www.cplusplus.com/reference/string/string/find.html
そもそも、findメソッド使いながら一文字ずつ調べようという発想が阿呆過ぎる。
0942デフォルトの名無しさん2008/06/05(木) 00:08:18
>>940
find は、i 文字目から探しはじめて、はじめにみつかった文字列を返す、ので、
i を1 ずつ加算していくとそりゃおかしくなるでしょうよ
0943デフォルトの名無しさん2008/06/05(木) 02:45:11
#include <iostream>
#include <string>

using namespace std;

int main(void)
{
string src = "aaaa\nbbb\nc\n\nddddd\n";
string::size_type pos = 0;
size_t count = 0;
while ((pos = src.find("\n", pos)) != string::npos) {
pos++;
count++;
}
cout << count << endl;
return 0;
}

09449372008/06/06(金) 14:26:46
iを1ずつ加算していくのは他にちょっと事情があったからなのですが・・説明不足でした。
レスありがとうございました。解決しましたm(_ _)m
0945デフォルトの名無しさん2008/06/06(金) 15:05:22
wxRichTextCtrl
を使ってみたんですが、マルチバイト文字をテキストコントロールのインターフェースに入力すると、なんか補完ウィンドウ?みたいのが出ます。

これを出ないようにしたいのですが、どうすればいいでしょうか。
リファレンス見ても分かりませんでした。
0946デフォルトの名無しさん2008/06/06(金) 15:30:06
MacOSX 10.6でCarbon廃止されたら、wxMacもなくなるのかなあ。
0947デフォルトの名無しさん2008/06/06(金) 23:39:26
10.6で廃止は早すぎるだろう?
そのうちなくなるかもしれないが、俺達にはwxCocoaがある!
未だまともに動かないwxCococaがっ
0948デフォルトの名無しさん2008/06/07(土) 00:19:47
誰も 32bit Carbon を廃止はしないだろう、そんなことしたら MS Office が動かなくなる
0949デフォルトの名無しさん2008/06/07(土) 00:25:23
MS Office以前にAppleがSnow LepardまでにOS Xの付属アプリを
全部 Cocoa ベースに置き換えられるとは到底思えないんだよなぁ…
0950デフォルトの名無しさん2008/06/08(日) 18:42:06
>>945 です。
補完ウィンドウが出る、というか、日本語を打つと、書いた文字がスペースキーを押すと漢字変換が出来る状態になりますが、
その状態の文字が、文字を打った場所ではなく、なぜかテキストコントロールのインターフェースの一番上の行に毎回表示されてしまう、という現象のようです。(それを補完をウィンドウ?と455で言っていました。)
wxTextCtrlだと普通に打ったマルチバイト文字がその行に表示されるのですが・・wxRichTextCtrlだとなぜかこうなってしまいます。

解決方法見つからず困っています。どなたかアドバイスいただけると幸いです。
0951デフォルトの名無しさん2008/06/08(日) 23:19:46
>>950
wx のソースコードのバグを取って開発に貢献してください。
0952デフォルトの名無しさん2008/06/08(日) 23:52:47
バグというか実装されていない機能の中身おくったけどさ、
半年ぐらいしてパッチ当てるよーってメール着たんだが、さらに半年経っても当たる様子無い。
仕方ないんで、ソース取り出してクラス名変えて使ってるよ。
0953デフォルトの名無しさん2008/06/08(日) 23:52:54
自己解決しました
0954デフォルトの名無しさん2008/06/09(月) 00:08:10
自己解決したときはどう解決したかかいておいてください
あとで同じことにはまる人もいると思うので。
0955デフォルトの名無しさん2008/06/09(月) 00:34:26
自分のした質問じゃないのに「自己解決しました」とだけ書いて去っていく荒らしもいるから注意な。
0956デフォルトの名無しさん2008/06/09(月) 03:26:30
自己完結しました
09579452008/06/09(月) 11:31:24
解決してません。

やはり自分もwxWidgets自体のバグなのかなと思うのでソースをいじってみることを考えているのですが、
スペースキーで漢字変換できる状態(うまい表現の仕方あったら教えてください・・)の文章の表示位置がおかしい、というのは、wxWidgetsとIMEの連携部分で何かおかしくなっている、ということなのでしょうか。
wxTextCtrlなら正常に動く感じなので、textctrl.hとrichtextctrl.hを比べてみたりしているのですが、どの辺りを見ればいいのか・・
0958デフォルトの名無しさん2008/06/09(月) 18:00:33
>>957
気になったので調べてみた。
どうやら wxRichTextCtrl は独自の処理を行っていて
riched32.dll などを使っていないようだ。
wxTextCtrl に wxTE_RICH(2) などを付加して作成すると
riched32(20).dll を使う仕組みになっているっぽい。
09599572008/06/09(月) 19:22:43
貴重な情報ありがとうございます!
ドキュメントを色々読み直していたのですが、もしかしたら自分のやりたいことがwxTextCtrlでもできるかもしれないような記述を見つけたので、
wxTextCtrlをもうちょっといじってみようかと丁度思っていたところでした。

自分のやりたいことというのが、プログラマ向けのエディタによくある予約語の強調表示なのですが、
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx381.htm
ここに、
「例えば、1つ1つの文字に色やフォントを指定することも可能である
(ただし、Windows下では、スタイルをサポートするためにwxTE_RICHスタイルが要求されることに注意すること)。」
のように書いてあります。
さらにその下に

text->SetDefaultStyle(wxTextAttr(*wxRED));
text->AppendText("Red text\n");
text->SetDefaultStyle(wxTextAttr(wxNullColour, *wxLIGHT_GREY));
text->AppendText("Red on grey text\n");

のようなソースが示されていて、なんとなく感じは分かるのですが、
これだとインタフェースに文字を打ち込む際、特定の文字を打ち込んだ時リアルタイムに強調表示するようにできるのかどうか
(もちろんその文字を一部消したら、強調表示をリアルタイムで解除するようにもできるかどうか)分かりません。wxTextCtrlでこのようなことは出来るのでしょうか??質問ばかりですいません。
0960デフォルトの名無しさん2008/06/09(月) 22:20:00
wxWidgets 一般の話をしているのか、wxMSW の話をしているのか区別をしてくれ ...
09619572008/06/09(月) 23:15:37
今はWindowsで開発しているのでwxMSWですが、
wxTextCtrlで強調表示機能実現できるかどうかってプラットフォームに依るのでしょうか??
wxTE_RICHはMSWでしか使えなくて、それ使わないと無理なので他のプラットフォームでは自動的にwxTextCtrlでは実現不可、ってことでしょうか。
0962デフォルトの名無しさん2008/06/10(火) 11:19:56
>>961
wxTE_RICH は wxMSW 専用。ほかの環境では意味をなさない。
(リッチエディットコントロールを使う指定だから)

>>959
入力した文字列をリアルタイムに強調表示したいのであれば、
OnChar(wxKeyEvent &)
あたりを使えばいいんじゃないかな。やってみないとわからないけど。
0963デフォルトの名無しさん2008/06/10(火) 11:25:22
>>961
ちょっと説明不足だったけど、強調表示などは
wxTE_RICH を指定しなくても wxTextCtrl::SetStyle() と
wxTextAttr を使えば、実現できるんじゃないかな。
09649572008/06/11(水) 00:01:42
wxTextCtrl::SetStyle
http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx381.htm#wxtextctrlsetstyle
「選択された部分の」スタイルを変更する。
この部分見逃していました。。

OnChar()ってのはMSW専用なんでしょうか。
msw/textctrl.h には書かれていますが普通のtextctrl.hには無いみたいです。
univ/textctrl.hってのにもありますが、univってのは何用なのか・・

でもとりあえずEVT_KEY_DOWNキーイベント用のハンドラをSetStyle()使って書けば実現できる気がしてきました。
ご丁寧に何度もありがとうございましたm(_ _)m
0965デフォルトの名無しさん2008/06/11(水) 10:46:47
>>964
univ ってのは、たぶん Universal Version のこと。
Windows の例で言えば、Windows のコントロールを使わず、
全部自前で処理するようにすること。
いろいろなプラットフォームで共通した動作をするようになる。
09669572008/06/18(水) 18:21:31
なるほど、ありがとうございます。
返信遅れてすいません。

EVT_KEY_DOWN とか EVT_CHARとか使って強調表示機能っぽいものが出来始めたのですが、一つ分からないことが出てきました。

EVT_CHARは、ASCII文字の入力のタイミングは拾えるようなのですが、どうも全角文字の入力タイミングは拾えないみたいなんです。
全角文字でも強調表示したい単語があるので、全角文字が一字書き込まれる毎にそのタイミングを拾って、そのイベントが終了したらwxProcessEventでキャレット周辺の文字列を取得して、所定の文字列が含まれていたら強調表示〜みたいなことがしたいのですが、
そもそも全角文字入力の際に発生しているイベントはなんなのでしょう??
0967デフォルトの名無しさん2008/06/18(水) 21:37:04
>>966
2度EVT_KEY_DOWNが飛んできませんか?
内部で捨てていない限り2度飛んでくるので、
それを漢字1文字分にすればいいと思います。
0968デフォルトの名無しさん2008/06/18(水) 23:14:50
>>966
キー毎に強調表示するんでなくて、タイマーで1秒ごとに処理するとか ...
0969デフォルトの名無しさん2008/06/23(月) 01:12:54
なんかnoobっぽい質問なんですが

#include <wx/memory.h> して wxDebugContext::PrintStatistics(); すると

error: ‘wxDebugContext’ has not been declared

というエラーになるんですが、なぜなんでしょうか。
プリプロセッサかなにか定義しないといけないんでしょうか。
ちなみに関係ないと思いますがwx-configには--debugを渡しています。
バージョンは2.8.7.1です。
0970デフォルトの名無しさん2008/06/23(月) 17:28:25
>>969
noob ってなんだろ…

sample の memcheck.cpp をみてみたけど、 wx/setup.h の下に書いてある
wxUSE_MEMORY_TRACING か wxUSE_DEBUG_CONTEXT を 1 に
しないと使えないみたいだよ。
09719692008/06/23(月) 21:52:45
>>970
どうもありがとうございます、コンパイルはできました。

…ですがリンク時に大量のエラーが。
undefined reference to `wxObject::operator new(unsigned int, wchar_t const*, int)'
とか
undefined reference to `wxObject::operator delete(void*)'
とか
/usr/include/wx-2.8/wx/memory.h:329: undefined reference to `wxDebugContextDumpDelayCounter::sm_count'
とか。

うーん。
g++ `wx-config --libs --debug` *.o
リンクコマンドはこんな感じなんですが。
0972デフォルトの名無しさん2008/06/23(月) 23:16:55
--cflagsも付けないと…
wx-config --cflags --libs --debug
でどうよ
0973デフォルトの名無しさん2008/06/23(月) 23:17:25
あ、ごめん、リンクコマンドでしたね
0974デフォルトの名無しさん2008/06/23(月) 23:25:24
>>971
wx-configだけで実行してみ?
-Lオプションとかちゃんとついてる?
09759692008/06/23(月) 23:42:53
$ wx-config --libs --debug
-pthread -Wl,-Bsymbolic-functions -lwx_gtk2ud_richtext-2.8 -lwx_gtk2ud_aui-2.8 -lwx_gtk2ud_xrc-2.8 -lwx_gtk2ud_qa-2.8 -lwx_gtk2ud_html-2.8 -lwx_gtk2ud_adv-2.8 -lwx_gtk2ud_core-2.8 -lwx_baseud_xml-2.8 -lwx_baseud_net-2.8 -lwx_baseud-2.8

こんなかんじでした。
0976デフォルトの名無しさん2008/06/23(月) 23:44:57
>>975
いや、だから、-Lがないじゃん。
--cflagsでも--ldflagsでもいいから、-Lオプションが出るようにしてみ?
09779692008/06/23(月) 23:51:19
>>976
うーん、どのフラグを指定しても-Lオプションは出ないみたいです。
ちなみにwx/setup.hをもとに戻してwxDebugContextの部分を消せば、ほかでwxWidgetクラスを参照していても
リンクまでちゃんとできます。
09789572008/06/24(火) 00:12:13
テキストコントロールの文字列を変更した直後に発生するEVT_TEXTというイベントがあるのを見つけ、それで解決しました。
レスありがとうございましたm(_ _)m
0979デフォルトの名無しさん2008/06/24(火) 00:28:58
>>977
あぁごめん、>>969からの流れ見てなかった。
自分でUbuntuにwxWidgets入れてみたら、/usr/lib/libwx*.so になってるから、-Lはいらなかった。多分>>969の環境も-L要らないんだろう。

で、wx/setup.hを勝手に変えちゃいけないよ。
wx/setup.hは、libwx*.soをビルドしたときに使ったオプションだから、変えたかったら自分でwxWidgetsをビルドしなおさないと。
0980デフォルトの名無しさん2008/06/24(火) 10:13:06
>>971
979 も書いているけど、ライブラリもリビルドしないと駄目。
リビルド方法は Windows ならやり方わかるんだけど、
Unix 関連だとわかんないや。スマソ。
09819692008/06/24(火) 23:27:51
>>980
なるほど、wxWidgets自体をリビルドですか…
思いのほかめんどいんですね。
ともかく、皆さんどうもありがとうございました。
レス数が950を超えています。1000を超えると書き込みができなくなります。