GetAsyncKeyState, скорее всего, не путь здесь: реальный способ сделать элемент управления типа текстовый редактор, чтобы вместо того, чтобы справиться с WM_KEYDOWN и WM_CHAR Сообщения. Windows отправит их на ваш WndProc, когда ваш HWND имеет фокус. Это метод, используемый элементами управления 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; оба позволяют управлению выполнять всю тяжелую работу и просто добавляют дополнительные функции пользовательского интерфейса и сохранения файлов/загрузки сверху.
хорошо, это работает, можете ли вы объяснить мне почему? – gfauchart
Объясняется [здесь] (http://www.gamedev.net/topic/484351-virtual-key-vs-ascii-key/) –