ページ 11

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

Posted: 2006年11月16日(木) 00:10
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キーを押したときに警告音が鳴ってうるさいので止めたいのですが、どうしたら良いのでしょう?
教えてください。

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

Posted: 2006年11月16日(木) 14:51
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

Posted: 2006年11月16日(木) 17:20
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
とすればいいんですよね?

Posted: 2006年11月16日(木) 18:29
by Tomorrow
試してみたところ、EditBoxはWM_KEYDOWNではなくWM_CHARでキー処理をするみたいです。

Posted: 2006年11月16日(木) 21:41
by doloop
うまく行きました。
ありがとうございます。