C ++ Win32 — реагирование на нажатия клавиш

Я пытаюсь сделать приложение Win32, которое я имитирую, что я нажимаю C клавиша на пианино, клавиатура № 60, со следующим вызовом: midiOutShortMsg (hMidiOut, DWORD (0x090 | 0 | (60 << 8) | (64 << 16)));

а при отпускании ключа № 60 сделайте следующий вызов: midiOutShortMsg (hMidiOut, DWORD (0x080 | 0 | (60 << 8) | (0 << 16)));

Проблема в том, что когда я нажимаю кнопку, я слышу звук только один раз. и только один случай работает, когда я запускаю программу.

Как мне сделать, чтобы звук повторялся до тех пор, пока я нажимаю. и как можно сделать, чтобы мелодия играла долго.

case WM_KEYDOWN:
{
switch (wParam) {

case VK_LEFT:
midiOutOpen(&hMidiOut, -1, 0, 0, 0);
// Set instrument to 0 = Acoustic Grand Piano
midiOutShortMsg(hMidiOut, DWORD(0x0C0 | 0 | (0 << 8) | (0 << 16)));
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (65<<8 ) | (64 << 16)));
break;

case 'S':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (62<<8 ) | (64 << 16)));
break;

case 'D':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (64<<8 ) | (64 << 16)));
break;

case 'F':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (65<<8 ) | (64 << 16)));
break;

case 'G':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (67<<8 ) | (64 << 16)));
break;

case 'H':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (69<<8 ) | (64 << 16)));
break;

case 'J':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (71<<8 ) | (64 << 16)));
break;

case 'K':
midiOutShortMsg (hMidiOut, DWORD(0x090 | 0 | (72<<8 ) | (64 << 16)));
break;

0

Решение

Я предполагаю, что вы могли бы хранить состояния ключей (возможно, используя массив bool) и выполнять воспроизведение в цикле обработки сообщений.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector