by 7 » 2007年6月23日(土) 15:44
> そこで、SetWindowText関数を使ったのですが、白紙の状態だとうまく追加するのですが、何か文字が入っていると今まで入力した文字が消えちゃいます。どうすればいいでしょうか?
その質問に関するトピックがかーなーりー定期的に立ってます。いつも答えてます(笑)
SetWindowText()関数は文字列を設定するもので、文字列を追加する関数ではありません。
そこで
EM_REPLACESEL というメッセージを使ってちょっと強引ですがエディットボックスに文字列を追加します。
第一引数:ウィンドウのハンドル
第二引数:追加する文字列
第三引数:元に戻せるかどうか。
TRUE で戻せる
コード: 全て選択
Function Edit_AddText(ByVal hWnd As HWND,ByVal lpString As LPSTR,ByVal bUndo As BOOL) As BOOL
SendMessage(hWnd,EM_SETSEL,GetWindowTextLength(hWnd),-1)
Edit_AddText=SendMessage(hWnd,EM_REPLACESEL,bUndo,lpString As LPARAM) As BOOL
End Function
上記のコードをグローバル領域で宣言しておき、文字列を追加したいタイミングで下記のようなコードを書きます。
コード: 全て選択
Edit_AddText(GetDlgItem(hMainWnd,EditBox1),"(^-^)",TRUE)
> そこで、SetWindowText関数を使ったのですが、白紙の状態だとうまく追加するのですが、何か文字が入っていると今まで入力した文字が消えちゃいます。どうすればいいでしょうか?
その質問に関するトピックがかーなーりー定期的に立ってます。いつも答えてます(笑)
SetWindowText()関数は文字列を設定するもので、文字列を追加する関数ではありません。
そこで [b]EM_REPLACESEL[/b] というメッセージを使ってちょっと強引ですがエディットボックスに文字列を追加します。
第一引数:ウィンドウのハンドル
第二引数:追加する文字列
第三引数:元に戻せるかどうか。[b]TRUE[/b] で戻せる
[code]Function Edit_AddText(ByVal hWnd As HWND,ByVal lpString As LPSTR,ByVal bUndo As BOOL) As BOOL
SendMessage(hWnd,EM_SETSEL,GetWindowTextLength(hWnd),-1)
Edit_AddText=SendMessage(hWnd,EM_REPLACESEL,bUndo,lpString As LPARAM) As BOOL
End Function[/code]
上記のコードをグローバル領域で宣言しておき、文字列を追加したいタイミングで下記のようなコードを書きます。
[code]Edit_AddText(GetDlgItem(hMainWnd,EditBox1),"(^-^)",TRUE)[/code]