EditBoxでEnterを押したときの時の警告音を無くしたい

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

EditBoxでEnterを押したときの時の警告音を無くしたい

#1 投稿記事 by doloop »

EditBoxで”改行を許可””複数行”をチェックせずに

コード: 全て選択


Function MainWndProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord
    ' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
    Select Case hWnd
        Case GetDlgItem(hMainWnd,EditBox1)
            If dwMsg=WM_KEYDOWN And wParam=VK_RETURN Then
                '何らかの処理
                MainWndProc=1
            End If
       MainWndProc=CallWindowProc(lpOldWndProc[0],hWnd,dwMsg,wParam,lParam)
        Case Else
            MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
    End Select

End Function


という方法で、
EditBox上でEnterキーを押したときに、
ある処理をするプログラムを作ろうとしています。

Enterキーを押したときに警告音が鳴ってうるさいので止めたいのですが、どうしたら良いのでしょう?
教えてください。
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

Re: EditBoxでEnterを押したときの時の警告音を無くしたい

#2 投稿記事 by Tomorrow »

EditBoxをサブクラス化してWM_KEYDOWNメッセージでリターンキーをスルーするのはどうでしょう?

コード: 全て選択

'サブクラス化で差し替えるウィンドウプロシージャ
Function SubclassProc(hWnd As HWND, dwMsg As DWord, wParam As WPARAM, lParam As LPARAM) As DWord 
	If dwMsg=WM_KEYDOWN And wParam=VK_RETURN Then
		'何もしない
		SubclassProc=0
		Exit Function
	End If

	'元のウィンドウプロシージャを呼ぶ
	SubclassProc=CallWindowProc(OldProc,hWnd,dwMsg,wParam,lParam)
End Function
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

#3 投稿記事 by doloop »

試してみましたが、やっぱり鳴ります。

コード: 全て選択


Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
     OldProc=SetWindowLong(GetDlgItem(hMainWnd,EditBox1),
                                          GWL_WNDPROC,
                                          AddressOf(SubclassProc) As LONG_PTR
                                          ) As VoidPtr
End Sub
とすればいいんですよね?
Tomorrow
記事: 72
登録日時: 2005年6月04日(土) 10:09

#4 投稿記事 by Tomorrow »

試してみたところ、EditBoxはWM_KEYDOWNではなくWM_CHARでキー処理をするみたいです。
doloop
記事: 11
登録日時: 2006年10月14日(土) 21:11

#5 投稿記事 by doloop »

うまく行きました。
ありがとうございます。
返信する