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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
サイト

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

#1

投稿記事 by サイト » 18年前

はじめまして。わからないことがあって検索していたらここにたどり着きました。
早速質問ですが、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:キーボード入力について聞きたいのですが・・・

#2

投稿記事 by サイト » 18年前

すみません。いきなりソースまちがえてました;

//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:キーボード入力について聞きたいのですが・・・

#3

投稿記事 by しっぽ » 18年前

「ポン」と関係あるかは知りませんが、

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

サイト

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

#4

投稿記事 by サイト » 18年前

返答ありがとうございます。

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

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

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

はい。そのとおりです。

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

しっぽ

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

#5

投稿記事 by しっぽ » 18年前

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

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

サイト

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

#6

投稿記事 by サイト » 18年前

NULLを""に変えてみたのですが、やはり「ポン」と鳴ってしまいます。
他の部分がおかしいのかもしれないのでソースを添付します。
判る人がおられましたら意見お願いします。

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

Justy

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

#7

投稿記事 by Justy » 18年前

 その音はどんな音ですか?
 そのアプリ用に用意した音なのでしょうか?

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

サイト

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

#8

投稿記事 by サイト » 18年前

>その音はどんな音ですか?
>そのアプリ用に用意した音なのでしょうか?

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

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

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

Justy

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

#9

投稿記事 by Justy » 18年前

 なるほど。
 であれば、XPを使っているとして、コントロールパネルの「サウンドとオーディオデバイス」を
開いて、さらに「サウンド」タブの中で設定を変えることができます。

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


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

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

サイト

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

#10

投稿記事 by サイト » 18年前

調べてみたところ

一般の警告音
Windows XP Ding.wav

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

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

Justy

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

#11

投稿記事 by Justy » 18年前

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

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

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

サイト

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

#12

投稿記事 by サイト » 18年前

ありがとうございました。
EditProcの最後に

if(wParam == VK_RETURN) return 0;

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

閉鎖

“C言語何でも質問掲示板” へ戻る