0

私はまだあなたの目にはおそらく自殺者であるか、もっともっともらしいのは、世界的な大企業を何としてでも経営する方法を学びたいと思っているただの子供です :L

ウィンドウ内にテキスト入力コンソールボックスを作ろうとして、私はこれを使いました:

textString.insert(cursorPosition,1,(char)wParam);
cursorPosition+=1;

ウィンドウの WM_CHAR メッセージからwParamを取得している間。そして、何かを入力すると、ぐちゃぐちゃになります!押されたキーごとに 3 文字、通常は大文字自体またはいくつかの奇妙な ASCII の間にあるはずの文字です。例えば:

a -> AaA

l -> LlL

\ -> ユー\ユー

Shift キー-> □ (空白) スペースの束

私の知る限り、テキストは WM_CHAR だけでなく WM_KEYDOWN と WM_KEYUP も取得するようです。メッセージハンドラーで呼び出されるクラスにコードを配置します。

case WM_CHAR:
myTextClass(wParam);
    break;

どうしたの?=_=''

必要に応じて、コードの他の部分を投稿します。

編集: わかりました、ちょっと待ってください。直観的には、他のメッセージの前に WM_CHAR 処理を移動することで問題が解決しましたが、返信する人の問題ではないにしても、なぜそれがすべてのことをしていたのか、まだ本当に興味があります xD

4

1 に答える 1

3

これらは、switch ステートメントの前のケースでbreakキーワードが欠落している場合に問題が発生するようなものです。したがって、WM_CHAR のケースに該当します。

そして、 WM_CHAR を処理するときに、breakを使用します。すでにメッセージを処理しているので、本当に戻るつもりだったときに DefWindowProc() に渡されるようにします。

十分なコードを投稿していないと思いますが、靴はフィットします。

于 2012-11-03T00:29:21.817 に答える