【GUI】wxWidgets(旧wxWindows) その3【サイザー】
■ このスレッドは過去ログ倉庫に格納されています
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
0045デフォルトの名無しさん
2006/10/21(土) 20:48:25エンコーディングを特定したければwxMBConv系を直接使う
0046デフォルトの名無しさん
2006/10/21(土) 22:33:57三番目のsize_t nにはwchar_tの文字列のサイズを渡せば良いのでしょうか。
0047デフォルトの名無しさん
2006/10/25(水) 14:15:34って警告が大量に出るんですが、これどうにかならないでしょうか?
0048デフォルトの名無しさん
2006/10/26(木) 00:17:38ノ /,.-‐'"´ `ヾj ii / Λ
,イ// ^ヽj(二フ'"´ ̄`ヾ、ノイ{
ノ/,/ミ三ニヲ´ ゙、ノi!
{V /ミ三二,イ , /, ,\ Yソ
レ'/三二彡イ .:ィこラ ;:こラ j{
V;;;::. ;ヲヾ!V ー '′ i ー ' ソ
Vニミ( 入 、 r j ,′
ヾミ、`ゝ ` ー--‐'ゞニ<‐-イ
ヽ ヽ -''ニニ‐ /
| `、 ⌒ ,/
| >┻━┻'r‐'´
ヽ_ |
ヽ _ _ 」
ググレカス [ Gugurecus ]
( 2006 〜 没年不明 )
0049デフォルトの名無しさん
2006/10/26(木) 00:48:490050デフォルトの名無しさん
2006/11/04(土) 02:25:220051デフォルトの名無しさん
2006/11/05(日) 19:06:100052デフォルトの名無しさん
2006/11/05(日) 20:24:22ボタンとか、絶対位置指定できる点はいいとは思うけど。
DialogBlocksはちょっと複雑なの書くとエラーがでるんだが・・・
0053デフォルトの名無しさん
2006/11/09(木) 01:32:48つまづいてます
メインの処理とかはどうでいいのですが、常駐アプリとして使うことを考慮して
1. 常に手前に表示
2. 透明度を変えられる
3. キーボードとかマウスとかのイベントを下のウィンドウにスルー
を実現したいのですが3番目を実現する方法がわかりません
0054デフォルトの名無しさん
2006/11/09(木) 02:36:59005553
2006/11/09(木) 18:20:15私のグーグル力が確かならVetoはwxNotifyEventではじめて定義されてるので
wxNotifyEventを継承していないwxMouseEventに対しては呼べないと思うのですが・・・
wxNotifyEvent
ttp://www.wxwidgets.org/manuals/2.6.3/wx_wxnotifyevent.html
0056デフォルトの名無しさん
2006/11/09(木) 20:38:2611月13日に2.8.0リリース予定だそうだ
005753
2006/11/09(木) 23:02:03ttp://forums.belution.com/ja/vc/000/172/70.shtml
Win32APIネイティブでここまでゴリゴリやってできないとなると
それをクロスプラットフォームGUIライブラリに求めるのは酷だと思うのであきらめます
ありがとうございました
0058デフォルトの名無しさん
2006/11/12(日) 18:29:20なんか、そんな話が出てたような気がするんで。
そのソースってまだ公開されてないですよね?
0059デフォルトの名無しさん
2006/11/12(日) 22:16:52おまいら、何でGUI君でんの?
0060デフォルトの名無しさん
2006/11/12(日) 22:21:340061デフォルトの名無しさん
2006/11/12(日) 22:25:370062デフォルトの名無しさん
2006/11/12(日) 22:35:240063デフォルトの名無しさん
2006/11/14(火) 12:45:50EVT_GRID_CELL_CHANGEの時に新しく行を追加すると
無限ループになってしまいます。
エラーを見ると、新しい行でEVT_GRID_CELL_CHANGEが起きてるのでなくて
最初にEVT_GRID_CELL_CHANGEを起こした行で再帰になってるようなのですが
これを回避する方法はありますか?
やりたいことは MS Accessのテーブルみたいに、
空白行に何か書込んだら、新しい空白行を追加したいのです。
class MyGrid(wx.grid.Grid):
def __init__(self, parent):
wx.grid.Grid.__init__(self, parent, -1, size=(200, 100) )
self.CreateGrid(1,1)
self.Bind(wx.grid.EVT_GRID_CELL_CHANGE, self.OnCellChange)
def OnCellChange(self, event):
Row = event.GetRow()
print "%d: EVT_GRID_CELL_CHANGE" % Row
self.InsertRows(Row + 1, 1, 1)
結果:
0: EVT_GRID_CELL_CHANGE
(・・数十行繰り返し・・)
0: EVT_GRID_CELL_CHANGE
Traceback (most recent call last):
File ****, line 15, in OnCellChange
Row = event.GetRow()
RuntimeError: maximum recursion depth exceeded
0065デフォルトの名無しさん
2006/11/14(火) 16:26:120066デフォルトの名無しさん
2006/11/15(水) 23:21:200067デフォルトの名無しさん
2006/11/15(水) 23:28:33OnCellChangeで再帰呼び出しチェック用のフラグ立てて、
再帰だったら何もしないでreturnすりゃいいんじゃない?
0068デフォルトの名無しさん
2006/11/16(木) 01:22:30ちょっとウザイ
サイズがでかいのはどうにかならないかな?
メモ帳を作ったら、3Mあったよ。
ありえねー
0069デフォルトの名無しさん
2006/11/16(木) 10:40:39ダイナミックリンクにすればいい。
0070デフォルトの名無しさん
2006/11/16(木) 12:26:43フラグのタイミングをいろいろ試して、
・・・
self.FlagRec = 0
def OnCellChange(self, event):
Row = event.GetRow()
self.FlagRec += 1
print "%d: %d: EVT_GRID_CELL_CHANGE" % (self.FlagRec, Row)
if self.FlagRec == 1:
self.InsertRows(Row + 1, 1, 1)
self.FlagRec = 0
としたらうまくいきました。
あと、InsertRows じゃなくて AppendRows を使えば再帰が起らず思い通りになりました
0071毛の生えたブリーフ
2006/11/20(月) 20:42:19私はwxBasicを使っています。結構高速に動くし、楽チンです。
frame = New wxFrame(NULL, -1 "テスト")
frame.Show(True)
このたった二行で、窓が開きます。
暇ができたら自分のサイトに解説を書こうと思っています。
0072デフォルトの名無しさん
2006/11/20(月) 20:58:180073デフォルトの名無しさん
2006/11/20(月) 21:05:55main = start $ frame [text := "test", visible := True]
wxHaskellでも二行、と意地を張ってみるテスト
0074デフォルトの名無しさん
2006/11/20(月) 21:18:480075デフォルトの名無しさん
2006/11/20(月) 21:44:540076毛の生えたブリーフ
2006/11/20(月) 22:37:32frame = New wxFrame(NULL, -1, "テスト")
button = New wxButton(frame, -1, "押してね")
frame.Show(True)
'-------イベントハンドラの作成
Function click(event)
wxMessageBox( "ボタンを押したね", "ボタンイベント", wxOK + wxICON_INFORMATION, frame )
End
End Function
'---------イベントとイベントハンドラの関連づけ
Connect(button, wxEVT_COMMAND_BUTTON_CLICKED, "click")
たったこれだけです。ですが、、、、wxWidgetsのドキュメントを
読みこなすのは正直きついですね。wxBasicのウィジェッツはバージョンが
古いので、本家から古めのドキュメントを取ってきて読んでいます。
0077毛の生えたブリーフ
2006/11/21(火) 21:09:59これは本当に奥が深いものです。
76のコードではウィンドウいっぱいにボタンが表示されます。
wxButton(frame, -1, "押してね", wxPoint(40,50), wxSize(50,80))
などにしても駄目です。どうしてか・・・・・三日悩んで見つかったもの
それが「サイザー」
0078デフォルトの名無しさん
2006/11/21(火) 22:18:100079デフォルトの名無しさん
2006/11/21(火) 22:51:550080デフォルトの名無しさん
2006/11/21(火) 23:02:530081デフォルトの名無しさん
2006/11/23(木) 01:54:340082デフォルトの名無しさん
2006/11/23(木) 04:57:53眠い・・・・('A`)
0083デフォルトの名無しさん
2006/11/23(木) 08:26:57[退かぬ、媚びぬ、省みぬの三拍子を持ったプルグラマ]と対極に位置する存在
退かぬ、媚びぬ、省みぬの三拍子を持った[プルグラマと対極に位置する]存在
('A`) ドッチ?
0084毛の生えたブリーフ
2006/11/23(木) 09:11:52ところで
問1、 神魔血破弾を必殺技とする鬼哭霊気の物語のタイトルは
問2、 「アステカの星」を額に持つ、プロレスの星の男の名は
問3、 「三ツ矢」と言えば
問4、 ベガ星連合軍から滅ぼされたグレン星の守護ロボットの名は
0085デフォルトの名無しさん
2006/11/27(月) 10:15:55超遅くなりましたが後者デス
il||li
∧∧
/⌒ヽ)
..,,....〜(,_,,,).....,,,,....もうだめぽ
0086デフォルトの名無しさん
2006/12/15(金) 23:04:27http://jaist.dl.sourceforge.net/sourceforge/wxwindows/changes-2.8.0.txt
0087デフォルトの名無しさん
2006/12/16(土) 09:32:160088デフォルトの名無しさん
2006/12/19(火) 18:22:17http://pc8.2ch.net/test/read.cgi/tech/1165571435/
0089デフォルトの名無しさん
2006/12/19(火) 18:42:020090デフォルトの名無しさん
2006/12/31(日) 16:43:52バージョンはwxMSW-2.8.0です。
// src/common/dynarray.cpp 379行目から
void name::insert(iterator it, const_iterator first, const_iterator last) \
{ \
size_t nInsert = last - first, nIndex = it - begin(); \
if (nInsert == 0) \
return; \
Grow(nInsert); \
\
memmove(&m_pItems[nIndex + nInsert], &m_pItems[nIndex], \
(m_nCount - nIndex)*sizeof(T)); \
for (size_t i = 0; i < nInsert; ++i, ++it, ++first) \
*it = *first; \
m_nCount += nInsert; \
}
Growによって配列が再確保されるとitがdeleteされた領域を指してしまいます。
Growの後に it = begin() + nIndex; を挿入すれば大丈夫っぽいです。
0091デフォルトの名無しさん
2006/12/31(日) 22:20:34sourceforgeでバグレポできる。
0092デフォルトの名無しさん
2007/02/14(水) 07:29:330093デフォルトの名無しさん
2007/02/14(水) 18:03:270094デフォルトの名無しさん
2007/02/14(水) 19:40:560095デフォルトの名無しさん
2007/02/15(木) 05:30:100096デフォルトの名無しさん
2007/02/15(木) 08:56:490097デフォルトの名無しさん
2007/02/15(木) 19:44:08-mno-cygwin付けてコンパイルしようとするとエラーが起きる。どうしよう
g++ -c -mno-cygwin -Os -O4 -Wall `wx-config --cppflags` -I/usr/local/mingw/include hello.cpp
/usr/local/include/wx-2.8/wx/utils.h:21 から include されたファイル中,
/usr/local/include/wx-2.8/wx/cursor.h:41 から,
/usr/local/include/wx-2.8/wx/event.h:22 から,
:
:
/usr/local/lib/wx/include/msw-ansi-debug-static-2.8/wx/setup.h:808:1: 警告: this is the location of the previous definition
g++ -o hello.exe hello.o -mno-cygwin -mwindows `wx-config --libs` -L/usr/local/mingw/lib
/usr/local/lib/libwx_mswd_core-2.8.a(corelib_textctrl.o):textctrl.cpp:(.rdata$_ZTV10wxTextCtrl[vtable for wxTextCtrl]+0x3b0):
undefined reference to `std::basic_streambuf<char, std::char_traits<char> >::seekpos(std::fpos<_mbstate_t>, std::_Ios_Openmode)'
/usr/local/lib/libwx_mswd_core-2.8.a(corelib_textcmn.o):textcmn.cpp:(.rdata$_ZTV14wxTextCtrlBase[vtable for wxTextCtrlBase]+0x3b0):
undefined reference to `std::basic_streambuf<char, std::char_traits<char> >::seekpos(std::fpos<_mbstate_t>, std::_Ios_Openmode)'
/usr/local/lib/libwx_mswd_core-2.8.a(corelib_gsockmsw.o):../src/msw/gsockmsw.cpp:421: undefined reference to `___assert'
/usr/local/lib/libwx_mswd_core-2.8.a(corelib_gsockmsw.o):../src/msw/gsockmsw.cpp:454: undefined reference to `___assert'
:
:
/usr/local/lib/libwx_based-2.8.a(baselib_datetime.o):../src/common/datetime.cpp:2283: undefined reference to `_gmtime_r'
collect2: ld はステータス 1 で終了しました
make: *** [hello.exe] エラー 1
0098デフォルトの名無しさん
2007/02/15(木) 19:48:21http://namazu.org/~satoru/pub/uu-2004-08/
ここ参考にしました
0099デフォルトの名無しさん
2007/02/15(木) 21:43:53gmtime_rが見て意義。
0100デフォルトの名無しさん
2007/02/16(金) 03:32:09載ってるページってない?
0101デフォルトの名無しさん
2007/02/16(金) 08:58:540102デフォルトの名無しさん
2007/02/16(金) 18:26:44samplesというディレクトリに60万行ほど載ってるけど、まだ足りないの?
0103デフォルトの名無しさん
2007/02/18(日) 01:33:16samplesにはプルダウンメニューのサンプルがないよね。コンボボックスはあるけど。
どのクラスを使えばいいんだろう?
0104デフォルトの名無しさん
2007/02/18(日) 14:13:59wxComboBoxのwindow styleにwxCB_DROPDOWNとか
wxCB_READONLYを指定すればいいんじゃない?
0105デフォルトの名無しさん
2007/02/18(日) 15:50:220106デフォルトの名無しさん
2007/02/18(日) 18:21:10wxChoiceとwxComboBoxってどう違うん?
0107デフォルトの名無しさん
2007/02/18(日) 18:30:04wxComboBoxは、プルダウンメニュー+「メニューにない物も入力出来るテキストボックス」
0108デフォルトの名無しさん
2007/02/23(金) 11:07:220109デフォルトの名無しさん
2007/02/24(土) 08:44:46比べ物にならないな。
糞。
0110デフォルトの名無しさん
2007/02/24(土) 16:36:050111デフォルトの名無しさん
2007/02/25(日) 01:24:440112デフォルトの名無しさん
2007/02/25(日) 01:27:390113デフォルトの名無しさん
2007/02/25(日) 03:00:560114デフォルトの名無しさん
2007/02/26(月) 04:44:02(行番号があらかじめ書いてある原稿用紙に書き込む感じにしたい)
なんかいい方法ない?
0115デフォルトの名無しさん
2007/02/26(月) 08:12:02行番号表示用のウィンドウを作るのが多分一番楽
0116114
2007/02/27(火) 01:48:30はい。それも考えたんですが、本文の行数が多い場合に縦にスクロールさせると、
行番号表示用の行数とずれてしまうという問題があり、詰まっています。
なにかいい手はないでしょうか?
0117デフォルトの名無しさん
2007/02/27(火) 10:53:40テキストコントロールの内容を変更するたびに、
行頭に行番号を追加するようにすればいいんじゃね?
0118デフォルトの名無しさん
2007/02/27(火) 17:01:250119114
2007/02/27(火) 23:27:54いままで簡単なスクリプトを書いて仕事(研究員)に使う程度だったのですが、
GUIつきのプログラムを作れば使いやすくなるし、同僚に自慢できるし、
上司によりアピールできるし。。。と思って始めたばかりです。
私のような初心者でも簡単なGUIが作れるという点ではwxwidgetsは素晴らしいと思います。
ただ、少し凝ろうとすると急にハードルが高く感じられます。今回の行番号表示など。
テキストエディタの表示オプションによくあったので、簡単に出来るのではと思ったのですが。
0120デフォルトの名無しさん
2007/02/28(水) 00:59:27GUIフレームワークって何でもそうです。あらゆるものを御仕着せで用意するのは無理。
用意された機能を利用して実現できればそれでいいわけで、
これくらいはまだすんなり実現できる範疇に入るでしょうよ。
>>116は要はテキストコントロールをスクロールさせたら行番号表示が一緒に
動かないからずれるってことでしょ? それなら行番号表示の方も一緒に動かせればいい。
ということで次のステップはイベント処理ですね。
テキストコントロールのスクロールが発生したときを捕捉して、そのスクロール
量を知り、行番号表示の方に指定量のスクロールをさせる。
0121デフォルトの名無しさん
2007/02/28(水) 01:09:23基本的には、番号用のウインドウを作る→さもメインのパネルの一部かのように組み込む→
(位置を計算して)番号出す→スクロールイベントを取得→表示のアップデート(スクロール)
って流れかねえ。
>テキストエディタの表示オプションによくあったので
なんかこう、GUIをべたーっとした一枚の絵のように考えていたら
簡単にはできないよw
あと、この場合情報としての価値は低いが使用言語も書いたほうがいいよ。
0122114
2007/02/28(水) 03:32:32アドバイスありがとうございます。イベント処理はいままで扱ったことが
ないので、調べてみます。
>あと、この場合情報としての価値は低いが使用言語も書いたほうがいいよ。
失礼しました。
Windows XP, ActivePerl-5.8 でwxPerlを使っています。
wxPerlは比較的マイナーなようですね。
0123デフォルトの名無しさん
2007/02/28(水) 06:37:400124デフォルトの名無しさん
2007/02/28(水) 13:10:52import wx
import re
class MyApp(wx.PySimpleApp):
def OnInit(self):
Frame = wx.Frame(None, -1, "Text Edit", size=(400,400))
self.Btn = wx.Button(Frame, -1, "Set Number")
self.Btn.Bind(wx.EVT_BUTTON, self.SetNum)
self.TxtBox = wx.TextCtrl(Frame, -1, "One\nTwo\n", style=wx.TE_MULTILINE)
self.SetNum(wx.Event)
MySizer = wx.BoxSizer(wx.VERTICAL)
MySizer.Add(self.Btn, 0, wx.FIXED_MINSIZE | wx.LEFT | wx.RIGHT | wx.TOP, 20)
MySizer.Add(self.TxtBox, 1, wx.EXPAND | wx.ALL, 20)
Frame.SetSizer(MySizer)
Frame.Show(1)
return 1
(つづく)
0125デフォルトの名無しさん
2007/02/28(水) 13:13:13Text = self.TxtBox.GetValue()
OldLines = Text.split('\n')
NewLines = []
Count = 1
for OldLine in OldLines:
NewLine = re.sub('^([ \d]+: )?', '%4d: ' % Count, OldLine)
NewLines.append(NewLine)
Count += 1
self.TxtBox.SetValue('\n'.join(NewLines))
app = MyApp()
app.MainLoop()
30分くらいで単純に作ったので、細かいツッコミは無しでお願いします。
0126デフォルトの名無しさん
2007/02/28(水) 23:55:44つか、そのままコピペしたらエラー出たわw
おいバグかよ、って思ったら、インデントの関係だったわ。
(SetNumはMyAppクラス内なのね。)
これだからpythonはw
0127114
2007/03/01(木) 01:47:35ありがとうございます。こういう参考に出来るコードがあればと思っていたところでした。
ぱっと見まだよく分からないんですが、参考にさせてもらいます。
0128デフォルトの名無しさん
2007/03/01(木) 13:20:33すぐに気づけてよかったね。
これだから(ry
0129デフォルトの名無しさん
2007/03/01(木) 16:19:360130デフォルトの名無しさん
2007/03/01(木) 16:36:26日本語でおk
0131デフォルトの名無しさん
2007/03/01(木) 20:30:47「Windowsでテキスト表示のフォントが変わったんですか?」
らしい。
0132デフォルトの名無しさん
2007/03/02(金) 00:17:040133デフォルトの名無しさん
2007/03/02(金) 00:54:120134デフォルトの名無しさん
2007/03/02(金) 03:27:05予言だけど本気でコレの作者に中国人なり日本人なりが頼まないと未来永劫にわたって変更はない。
0135デフォルトの名無しさん
2007/03/02(金) 11:08:47文字化けしないフォントを使わなくなったのならいいんじゃないか
ちなみにエスパーだけど
0136デフォルトの名無しさん
2007/03/02(金) 13:12:040137デフォルトの名無しさん
2007/03/02(金) 23:17:020138デフォルトの名無しさん
2007/03/03(土) 19:44:35次のようなクラスを作ったのですが、Sliderを動かしたらその値がSpinCtrlに反映させるようにイベントを作ろうとしても上手くできません
.hで
enum
{ SliderPage_Slider = 100, };
class SliderAndSpinCtrlSet: public wxBoxSizer
{
public:
SliderAndSpinCtrlSet(wxWindow *parent, const wxString& title, int sliderID, float val, float min, float max, int spinCtrlID) : wxBoxSizer(wxHORIZONTAL)
{
m_slider = new wxSlider(parent, sliderID,
val, min, max ,
wxDefaultPosition, wxDefaultSize, 0);
m_spinctrl = new wxSpinCtrl(parent, spinCtrlID, wxString::Format(_T("%d"), val),
wxDefaultPosition, wxDefaultSize,
0,
min, max, val);
Add(m_spinctrl, 0, wxALL | wxGROW, 5);
Add(m_slider, 0, wxALL | wxGROW, 5);
}
void OnSlider(wxScrollEvent& event) { hogehoge... }
として、.cppで
BEGIN_EVENT_TABLE(SliderAndSpinCtrlSet, wxBoxSizer)
EVT_COMMAND_SCROLL(SliderPage_Slider, SliderAndSpinCtrlSet::OnSlider)
END_EVENT_TABLE()
としたのですが、エラーになりました。wxBoxSizerにはsm_eventTableなどを持っていないのが原因という事は分かったのですが、代替案が見つからず困っています。
どなたか上手いやり方をご存じないでしょうか?
0139デフォルトの名無しさん
2007/03/04(日) 02:38:550140デフォルトの名無しさん
2007/03/04(日) 03:13:20wxPanelだと、独立したウィンドウになってしまいませんか?
ウィンドウ内のコンポーネントとして配置できるような、SpinCtrlとSliderをセットにしたものを作りたいのですが・・・。
0141デフォルトの名無しさん
2007/03/04(日) 12:29:07- wxEventHandlerを継承してないとイベント扱えないのでは
- DECLARE_EVENT_TABLE必要
まあとにかくEvent Handling Overviewくらいは読めと。
0142デフォルトの名無しさん
2007/03/04(日) 13:08:40wxEvtHanderを継承してみました。
.hで
enum
{ SliderPage_Slider = 100, };
class SliderAndSpinCtrlSet: public wxBoxSizer, wxEvtHandler
{
public:
SliderAndSpinCtrlSet(wxWindow *parent, const wxString& title, int sliderID, float val, float min, float max, int spinCtrlID) : wxBoxSizer(wxHORIZONTAL)
{
m_slider = new wxSlider(parent, sliderID,
val, min, max ,
wxDefaultPosition, wxDefaultSize, 0);
m_spinctrl = new wxSpinCtrl(parent, spinCtrlID, wxString::Format(_T("%d"), val),
wxDefaultPosition, wxDefaultSize,
0,
min, max, val);
Add(m_spinctrl, 0, wxALL | wxGROW, 5);
Add(m_slider, 0, wxALL | wxGROW, 5);
}
void OnSlider(wxScrollEvent& event) { hogehoge... }
DECLARE_EVENT_TABLE()
};
として、.cppで
BEGIN_EVENT_TABLE(SliderAndSpinCtrlSet, wxEvtHander
EVT_COMMAND_SCROLL(SliderPage_Slider, SliderAndSpinCtrlSet::OnSlider)
END_EVENT_TABLE()
としてみましたが、コンパイルは通るものの、スライダーを動かしても何の反応もありません。
どうすればいいんだ・・・。Event Handling Overview今読んでいますが、難しいですね・・・。
0143デフォルトの名無しさん
2007/03/05(月) 00:42:03コントロールからのイベントが到達しないんじゃない?
やっぱ、wxPanel継承して、そのハンドラで受けるのがいいと思う。
そのPanelをひとつのコンポーネントとしてとらえればいいわけだし、
他パネルに配置もできるでしょ?
どうしても嫌なら、wxEvtHandler継承で、
m_slider->Connect(
SliderPage_Slider,
wxEVT_COMMAND_SLIDER_UPDATED,
wxCommandEventHandler(SliderAndSpinCtrlSet::OnSlider),
NULL, this);
とすればできる気がする。動作確認してないけど。
0144デフォルトの名無しさん
2007/03/05(月) 10:28:39wxPanel継承でできました!ありがとうございます。
というかwxPanelをコンポーネントとして配置できる事を知りませんでした。
まだ使い始めたばかりなもので・・・。
0145デフォルトの名無しさん
2007/03/08(木) 10:54:48ウィンドウを二つ表示しているんですが、
片方で何らかの操作をした結果の値を、もう一方のウィンドウ上に配置したスライダー
等のコンポーネントにリアルタイムに反映させたいのですが、何か方法はないでしょうか。
具体的に言うと、片方はwxGLCanvasを継承したクラスで、その画面上をドラッグすると
ある値が変わるのですが、ドラッグ中にもう一方のウィンドウ(wxPanel)上の
スライダー等の表示をその値を反映したものにリアルタイムに更新したいのです。
しかし、ドラッグ中にスライダー等にSetValueで値をセットしても、そのウィンドウに
フォーカスが移動するまでスライダー等の表示が更新されません。
仕方が無いのでドラッグ中にwxPanelのSetFocus()メソッドを呼んで無理やり更新させていますが、
なんか気持ち悪いです。
他に方法はないでしょうか。
■ このスレッドは過去ログ倉庫に格納されています