ページ 1 / 1
エディトボックスの内容の変更の通知について
Posted: 2007年3月18日(日) 00:48
by THEREMIN
エディトボックスの内容を変更したときに処理されるように、
MainWnd_InputEditBox_Change()という関数で処理しています。
で、MainWnd_Create()内で
InputEditBoxの値を初期化するためにSetDlgItemText()を呼んでいるのですが、どうやら2度呼ばれているようです。
つまり、InputEditBoxが作成された際にWM_SETTEXTが呼ばれている為だと思うのですが、
これをやめさせる良い方法はありますか?
消極的な方法ですと、フラグ変数を使って一回目は無視するという方法もありますが、
それだとエディトボックスの数分必要になりますし…
Posted: 2007年3月18日(日) 01:58
by trio
ためしに以下のコードを実行して見ましたが
一度しかメッセージボックスは表示されませんでしたので
ウィンドウメッセージの問題ではなくコード側の問題かと思われます
コード: 全て選択
Sub MainWnd_EditBox1_Change()
MsgBox 0,"",,,
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
SetDlgItemText(hMainWnd,EditBox1,"")
End Sub
原因が分かりました
Posted: 2007年3月18日(日) 19:23
by THEREMIN
アップダウンコントロールにエディトボックスを関連づけているのですが、
その時に「数値の自動表示」と「自動関連づけ」にしていると最初に呼ばれてしまうようです。
まあこれはしょうがないと言うことなんでしょうか…
とりあえず解決しました。
Posted: 2007年3月19日(月) 00:36
by THEREMIN
といっても2度も呼ばれるのは気持ち悪いし何が起こるか分からないので、
Callback.wbpを書き換えようと思いましたが、
RADを使うと書き換えられてしまうので、メインウィンドウで作ってしまうことにしました。
コード: 全て選択
Dim DefaultIndex=0 As Long ' 最初に読み込むファイル番号
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
' アップダウンコントロールを作成(0-100)
CreateUpDownControl(1342177430,258,25,20,38,hMainWnd,"UpDown", _
GetWindowLong(hMainWnd,GWL_HINSTANCE) As HINSTANCE, _
GetDlgItem(hMainWnd, InputEditBox),0,100,0)
' デフォルトの番号を設定
SetDlgItemText(hMainWnd, InputEditBox, Str$(DefaultIndex))
End Sub
ここで、InputEditBoxに設定する値はDefaultIndexとなっていますが、
iniファイルがあればファイルから読み込んだ値が使われます。