エディトボックスの内容の変更の通知について

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: エディトボックスの内容の変更の通知について

とりあえず解決しました。

by THEREMIN » 2007年3月19日(月) 00:36

といっても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ファイルがあればファイルから読み込んだ値が使われます。

原因が分かりました

by THEREMIN » 2007年3月18日(日) 19:23

アップダウンコントロールにエディトボックスを関連づけているのですが、
その時に「数値の自動表示」と「自動関連づけ」にしていると最初に呼ばれてしまうようです。
まあこれはしょうがないと言うことなんでしょうか…

by trio » 2007年3月18日(日) 01:58

ためしに以下のコードを実行して見ましたが
一度しかメッセージボックスは表示されませんでしたので
ウィンドウメッセージの問題ではなくコード側の問題かと思われます

コード: 全て選択


Sub MainWnd_EditBox1_Change()
	MsgBox 0,"",,,
End Sub

Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
	SetDlgItemText(hMainWnd,EditBox1,"")
End Sub

エディトボックスの内容の変更の通知について

by THEREMIN » 2007年3月18日(日) 00:48

エディトボックスの内容を変更したときに処理されるように、
MainWnd_InputEditBox_Change()という関数で処理しています。
で、MainWnd_Create()内で
InputEditBoxの値を初期化するためにSetDlgItemText()を呼んでいるのですが、どうやら2度呼ばれているようです。
つまり、InputEditBoxが作成された際にWM_SETTEXTが呼ばれている為だと思うのですが、
これをやめさせる良い方法はありますか?

消極的な方法ですと、フラグ変数を使って一回目は無視するという方法もありますが、
それだとエディトボックスの数分必要になりますし…

ページトップ