Так ведь это же надо DirectX использовать. Лучше пока без этих наворотов.
---------- Post added at 12:56 ---------- Previous post was at 12:54 ----------
Надеюсь свой эмулятор УКНЦ тоже пишите?
Вид для печати
Ну, если у вас позицируется, как крсоссплатформенная, то может быть.
А так, если для PC, то там директикс по умолчанию. Кстати, как без директикса синхронизироваться с лучом, использовать что-то типа BitBlt, а так же иметь доступ к звуковому буферу с точностью до позиции текущего проигрываемого отсчета?
---------- Post added at 12:57 ---------- Previous post was at 12:56 ----------
Да, ну легкотня) Вот спектрум - это сложнее)))
Я в своём эмуляторе терминала разбираю скан-коды клавиш:
Код:case WM_SYSKEYDOWN:
{
word uScan = HIWORD(lParam);
uScan &= 0x1FF;
У главной клавиши <Enter> код 28, у <NumPadEnter> код 284.Код:case WM_KEYDOWN:
{
word uScan = HIWORD(lParam);
uScan &= 0x1FF;
Хук нужен только для передачи окну скан-кодов клавиш VK_LWIN, VK_RWIN, VK_APPS, VK_SNAPSHOT и VK_NUMLOCK и отмены (при необходимости) передачи этих кодов в драйвер клавиатуры Windows. Скан-коды всех остальных клавиш передаются через сообщения WM_KEYDOWN и WM_SYSKEYDOWN совершенно стандартно.
Patron, в ранних версиях было также. Там в коде остались даже закомментированные места с использованием WM_KEYDOWN и WM_KEYUP. Но с УКНЦ тут есть некоторые моменты. Клавиатура передает как коды отжатия, так и нажатия, тем более скэн-коды, преобразование в КОИ-8 уже производится в драйвере клавиатуры в системном ПЗУ. Соответственно, если эмулятор получил по WM_KEYDOWN код клавиши, потом пропал фокус ввода, а клавишу отжали, то уже события WM_KEYUP не придет. Сама клавиша западёт в автоповтор в драйвере системного ПЗУ. А при использовании GetKeyboardState при получении фокуса клавиша не будет нажата и клавиатура в эмуляторе уже получит код отжатия.
Так же в УКНЦ клавиатура работает в режиме опроса, по 64 мкс на каждую клавишу, всего 128 клавиш. Получил таблицу, установил виртуальную матрицу в УКНЦ, и особо думать не надо.
Если же эмулировать 15ИЭ-00-013, то да, здесь я согласен - использовать WM_KEYDOWN значительно удобнее. Т.к. 15ИЭ-00-013 всё-таки терминал, то и проблема удобной раскладки решается легко.
Всякое может быть, какое-нибудь pop-up окно выскочет.
Спасибо всем за советы! Но пока пусть останется, как есть. Эмулировать отжатие клавиш сейчас довольно просто - надо только очистить матрицу клавиш, соответственно вслед за этим придут все кода отжатия, которые нужны.