【GUI】wxWidgets(旧wxWindows) その3【サイザー】
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2006/09/09(土) 00:06:30本家
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
0951デフォルトの名無しさん
2008/06/08(日) 23:19:46wx のソースコードのバグを取って開発に貢献してください。
0952デフォルトの名無しさん
2008/06/08(日) 23:52:47半年ぐらいしてパッチ当てるよーってメール着たんだが、さらに半年経っても当たる様子無い。
仕方ないんで、ソース取り出してクラス名変えて使ってるよ。
0953デフォルトの名無しさん
2008/06/08(日) 23:52:540954デフォルトの名無しさん
2008/06/09(月) 00:08:10あとで同じことにはまる人もいると思うので。
0955デフォルトの名無しさん
2008/06/09(月) 00:34:260956デフォルトの名無しさん
2008/06/09(月) 03:26:300957945
2008/06/09(月) 11:31:24やはり自分もwxWidgets自体のバグなのかなと思うのでソースをいじってみることを考えているのですが、
スペースキーで漢字変換できる状態(うまい表現の仕方あったら教えてください・・)の文章の表示位置がおかしい、というのは、wxWidgetsとIMEの連携部分で何かおかしくなっている、ということなのでしょうか。
wxTextCtrlなら正常に動く感じなので、textctrl.hとrichtextctrl.hを比べてみたりしているのですが、どの辺りを見ればいいのか・・
0958デフォルトの名無しさん
2008/06/09(月) 18:00:33気になったので調べてみた。
どうやら wxRichTextCtrl は独自の処理を行っていて
riched32.dll などを使っていないようだ。
wxTextCtrl に wxTE_RICH(2) などを付加して作成すると
riched32(20).dll を使う仕組みになっているっぽい。
0959957
2008/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:000961957
2008/06/09(月) 23:15:37wxTextCtrlで強調表示機能実現できるかどうかってプラットフォームに依るのでしょうか??
wxTE_RICHはMSWでしか使えなくて、それ使わないと無理なので他のプラットフォームでは自動的にwxTextCtrlでは実現不可、ってことでしょうか。
0962デフォルトの名無しさん
2008/06/10(火) 11:19:56wxTE_RICH は wxMSW 専用。ほかの環境では意味をなさない。
(リッチエディットコントロールを使う指定だから)
>>959
入力した文字列をリアルタイムに強調表示したいのであれば、
OnChar(wxKeyEvent &)
あたりを使えばいいんじゃないかな。やってみないとわからないけど。
0963デフォルトの名無しさん
2008/06/10(火) 11:25:22ちょっと説明不足だったけど、強調表示などは
wxTE_RICH を指定しなくても wxTextCtrl::SetStyle() と
wxTextAttr を使えば、実現できるんじゃないかな。
0964957
2008/06/11(水) 00:01:42http://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:47univ ってのは、たぶん Universal Version のこと。
Windows の例で言えば、Windows のコントロールを使わず、
全部自前で処理するようにすること。
いろいろなプラットフォームで共通した動作をするようになる。
0966957
2008/06/18(水) 18:21:31返信遅れてすいません。
EVT_KEY_DOWN とか EVT_CHARとか使って強調表示機能っぽいものが出来始めたのですが、一つ分からないことが出てきました。
EVT_CHARは、ASCII文字の入力のタイミングは拾えるようなのですが、どうも全角文字の入力タイミングは拾えないみたいなんです。
全角文字でも強調表示したい単語があるので、全角文字が一字書き込まれる毎にそのタイミングを拾って、そのイベントが終了したらwxProcessEventでキャレット周辺の文字列を取得して、所定の文字列が含まれていたら強調表示〜みたいなことがしたいのですが、
そもそも全角文字入力の際に発生しているイベントはなんなのでしょう??
0967デフォルトの名無しさん
2008/06/18(水) 21:37:042度EVT_KEY_DOWNが飛んできませんか?
内部で捨てていない限り2度飛んでくるので、
それを漢字1文字分にすればいいと思います。
0968デフォルトの名無しさん
2008/06/18(水) 23:14:50キー毎に強調表示するんでなくて、タイマーで1秒ごとに処理するとか ...
0969デフォルトの名無しさん
2008/06/23(月) 01:12:54#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:25noob ってなんだろ…
sample の memcheck.cpp をみてみたけど、 wx/setup.h の下に書いてある
wxUSE_MEMORY_TRACING か wxUSE_DEBUG_CONTEXT を 1 に
しないと使えないみたいだよ。
0971969
2008/06/23(月) 21:52:45どうもありがとうございます、コンパイルはできました。
…ですがリンク時に大量のエラーが。
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:55wx-config --cflags --libs --debug
でどうよ
0973デフォルトの名無しさん
2008/06/23(月) 23:17:250974デフォルトの名無しさん
2008/06/23(月) 23:25:24wx-configだけで実行してみ?
-Lオプションとかちゃんとついてる?
0975969
2008/06/23(月) 23:42:53-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いや、だから、-Lがないじゃん。
--cflagsでも--ldflagsでもいいから、-Lオプションが出るようにしてみ?
0977969
2008/06/23(月) 23:51:19うーん、どのフラグを指定しても-Lオプションは出ないみたいです。
ちなみにwx/setup.hをもとに戻してwxDebugContextの部分を消せば、ほかでwxWidgetクラスを参照していても
リンクまでちゃんとできます。
0978957
2008/06/24(火) 00:12:13レスありがとうございましたm(_ _)m
0979デフォルトの名無しさん
2008/06/24(火) 00:28:58あぁごめん、>>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:06979 も書いているけど、ライブラリもリビルドしないと駄目。
リビルド方法は Windows ならやり方わかるんだけど、
Unix 関連だとわかんないや。スマソ。
0981969
2008/06/24(火) 23:27:51なるほど、wxWidgets自体をリビルドですか…
思いのほかめんどいんですね。
ともかく、皆さんどうもありがとうございました。
レス数が950を超えています。1000を超えると書き込みができなくなります。