У нас есть устаревшее приложение, которое использует различные отдельные нажатия клавиш для выполнения определенных функций.Теперь мы хотим добавить сканер штрих-кода, но если фокус ввода находится не в нужном месте, это может привести к тому, что штрих-код будет интерпретироваться как набор отдельных команд, а не многосимвольный штрих-код.
MyПервоначально предполагалось сделать паузу на мгновение, когда будет доступен первый символ, затем проверить, сколько символов доступно во входном буфере, и обработать ввод как штрих-код, если ожидается несколько символов.Однако это не работает - std::cin.rdbuf()->in_avail()
всегда возвращает ноль:
Sleep( 50 );
const char ch( std::cin.get() );
std::cin.putback( ch );
if ( std::cin.rdbuf()->in_avail() >= 6 )
{
// code never reached :-(
}
Приведенный выше код был вставлен в контексте переопределения PreTranslateMessage()
для сообщения WN_KEYDOWN
.Может ли быть так, что сообщения еще не переведены, и поэтому std::cin
не имеет доступа к символам?Если да, то можно ли определить, сколько WM_KEYDOWN
сообщений поставлено в очередь вместо количества символов?Не совсем понятно, как это сделать с помощью API MFC и / или Win32.