GetAsyncKeyState は、おそらくここで使用する方法ではありません。テキスト エディター タイプ コントロールを作成する実際の方法は、代わりに WM_KEYDOWN および WM_CHAR メッセージを処理することです。HWND にフォーカスがある場合、Windows はこれらを WndProc に送信します。これは、Windows EDIT および RichEdit コントロールで使用される手法です。
WM_KEYDOWNを使用して、非文字キー (矢印 (VK_LEFT、VK_RIGHT)、ページアップなど) を処理します。テキスト文字にはWM_CHARを使用します。WM_KEYDOWN は、VK_ 値を使用して押されたキーを通知し、シフト状態を考慮しません。WM_CHAR はシフト状態を取るため、「A」対「a」または「1」対「!」が得られます。適切に。(これを行うには、メッセージ ループに TranslateMessage が必要であることに注意してください。)
そうは言っても、既存の Windows EDIT コントロールまたはRichEditコントロールを使用して作業を任せれば、さらに簡単で優れた方法になります。面白半分で遊んでいる場合を除き、車輪を再発明する正当な理由はほとんどありません。おそらくWin32を学んでいます。適切なテキスト エディターを作成するのは非常に複雑です。特に英語以外のテキストに入る場合は、考慮すべき多くの非自明なものがあります: 右から左へのテキスト (アラビア語、ヘブライ語) で正しく機能すること、使用されている IME で機能することを確認する必要があります。日本語と漢字を入力します。また、視覚障害のあるユーザーが引き続きコントロールを使用できるように、スクリーン リーダーがコントロールにアクセスできるようにする必要があります。EDIT と RichEdit がこれらすべてを行います。
たとえば、実際のメモ帳アプリは、EDIT コントロールの単なるラッパーです。WordPad は RichEdit コントロールをラップするだけです。どちらもコントロールにすべての難しい作業を任せ、追加の UI とファイルの保存/読み込み機能を上に追加するだけです。