0
case WM_KEYDOWN:
    if ( !(wParam >= 'A' && wParam <= 'Z') && !(wParam >= '0' && wParam <= '9') )
    {
        cout << (char)wParam << endl;
        cout << wParam << endl;
    }

私はすでに英数字の入力を除外しており、記号のみを受け入れていますが、wParam を介して記号を出力する方法がわかりません。何か案が?

4

2 に答える 2

0

間違ったWindows メッセージを使用しているだけです。WM_KEYDOWN は、文字ではなく仮想キーを報告します。仮想キーは、現在のキーボードの状態とアクティブなキーボード レイアウトを使用して、TranslateMessage() によって文字に変換されます。修飾キー、Shift、Alt、Control がアクティブであるかどうかが重要であるため、状態は重要です。言語によってキーボードのキーが異なる文字にマッピングされるため、レイアウトは重要です。WM_KEYDOWN は、ショートカット キー ストロークにのみ役立ちます。F1のように。

代わりに WM_CHAR を使用してください。

于 2013-06-05T11:11:29.137 に答える
0

仮想キーコードである可能性があり、矢印キーなどの一部は印刷可能な文字の範囲に入る可能性があるため、 を charwParamにキャストすることは安全ではありません。WM_KEYDOWN

次に、GUI アプリケーションを作成しているように見えるため、 の出力は表示されませんcout

これら 2 つの問題を解決したら、ispunct関数を使用します。

于 2013-06-05T10:29:54.773 に答える