ページ 11

キーボード入力について聞きたいのですが・・・

Posted: 2007年6月15日(金) 15:08
by サイト
はじめまして。わからないことがあって検索していたらここにたどり着きました。
早速質問ですが、C++言語を使ってwindow表示で入力した文字を表示するという簡単なプログラムを作っているのですが、ENTERを押すと「ポン」という音が鳴ってしまいます。動作には支障ないのですが、音を消す方法はありませんか?以下に簡略なソースを載せます。

LRESULT CALLBACK EditProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
int re;

if(iMsg == WM_KEYDOWN && wParam == VK_RETURN){
re = GetWindowText(hWndTextIn, buf, BUF_LENGTH);
SendMessage(hWndTextDisp, WM_SETTEXT, SAY_LENGTH, (LPARAM) buf);
InvalidateRect(cons.hWnd, NULL, TRUE);
}
if(iMsg == WM_KEYUP && wParam == VK_RETURN){
SendMessage(cons.hWndTextIn, WM_SETTEXT, BUF_LENGTH, (LPARAM) NULL);
}

return CallWindowProc(cons.fnoldedit, hwnd, iMsg, wParam, lParam);
}

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月15日(金) 15:22
by サイト
すみません。いきなりソースまちがえてました;

//hWndTextIn  入力ハンドル
//hWndTextDisp 出力ハンドル
//hWnd windowハンドル

LRESULT CALLBACK EditProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
int re;

if(iMsg == WM_KEYDOWN && wParam == VK_RETURN){
re = GetWindowText(hWndTextIn, buf, BUF_LENGTH);
SendMessage(hWndTextDisp, WM_SETTEXT, SAY_LENGTH, (LPARAM) buf);
InvalidateRect(hWnd, NULL, TRUE);
}
if(iMsg == WM_KEYUP && wParam == VK_RETURN){
SendMessage(hWndTextIn, WM_SETTEXT, BUF_LENGTH, (LPARAM) NULL);
}

return CallWindowProc(fnoldedit, hwnd, iMsg, wParam, lParam);
}

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月15日(金) 22:33
by しっぽ
「ポン」と関係あるかは知りませんが、

SendMessage(hWndTextIn, WM_SETTEXT, BUF_LENGTH, (LPARAM) NULL);
は変です。第4引数で NULL を渡してます。
あと第3引数は利用できないはずですが、hWndTextIn のウィンドウを
サブクラス化して、WM_SETTEXT メッセージを処理しているという
ことでしょうか?

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月15日(金) 23:55
by サイト
返答ありがとうございます。

>SendMessage(hWndTextIn, WM_SETTEXT, BUF_LENGTH, (LPARAM) NULL);
>は変です。第4引数で NULL を渡してます。

のNULLは入力側のウィンドウの文字を消すためにこのようにしました。

>あと第3引数は利用できないはずですが、hWndTextIn のウィンドウを
>サブクラス化して、WM_SETTEXT メッセージを処理しているという
>ことでしょうか?

はい。そのとおりです。

どこがおかしいんだろう・・・

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月16日(土) 07:48
by しっぽ
> NULLは入力側のウィンドウの文字を消すためにこのようにしました。

ウィンドウの文字を消すのなら、"" でしょう。

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月16日(土) 17:14
by サイト
NULLを""に変えてみたのですが、やはり「ポン」と鳴ってしまいます。
他の部分がおかしいのかもしれないのでソースを添付します。
判る人がおられましたら意見お願いします。

失礼ながら、resource.h・xxx.rc・アイコン等は入れてないのでビルドは通りません。

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月16日(土) 20:15
by Justy
 その音はどんな音ですか?
 そのアプリ用に用意した音なのでしょうか?

 もし、そうでないのであればOSのイベントにサウンドが
割り当てられていたりしませんか?

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月17日(日) 11:49
by サイト
>その音はどんな音ですか?
>そのアプリ用に用意した音なのでしょうか?

いいえ、音は用意していません。

>もし、そうでないのであればOSのイベントにサウンドが
>割り当てられていたりしませんか?

∑ そうだと思います。どうやってサウンド割り当てを解除できるのでしょうか?

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月17日(日) 12:00
by Justy
 なるほど。
 であれば、XPを使っているとして、コントロールパネルの「サウンドとオーディオデバイス」を
開いて、さらに「サウンド」タブの中で設定を変えることができます。

 ざっくりと「サウンド設定」をサウンドなしにすれば全部のイベントが
解除されます。


Windows XP ステップ バイ ステップ ガイド : サウンド設定を選択する
http://www.microsoft.com/japan/enable/t ... cheme.mspx

各種のイベント音を消す:デジタルARENA
http://arena.nikkeibp.co.jp/article/tec ... 09/120840/

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月17日(日) 12:11
by サイト
調べてみたところ

一般の警告音
Windows XP Ding.wav

が、鳴ってるみたいです。

これは異常ではないのですか?

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月17日(日) 13:43
by Justy
>これは異常ではないのですか?

 そのイベントはちょっとした喚起を促す程度のことでも発生するものなので、
気にしなくてもいいと思います。

 で、コンパネから設定しないのであれば、メッセージの処理(EditProc)で
WM_CHARのとき且つ押されたのが VK_RETURNなら何もしないようにすれば鳴らなくなります。

Re:キーボード入力について聞きたいのですが・・・

Posted: 2007年6月17日(日) 14:15
by サイト
ありがとうございました。
EditProcの最後に

if(wParam == VK_RETURN) return 0;

を書くと鳴らなくなりました。
しっぽさん、Justyさん本当にありがとうございました。
また問題にぶつかったときよろしくお願いします。