Из-за чего закрывается моё приложение?
Следующий код я сделал для обработки WinApi событий(KeyDown и KeyUp). Если я пытаюсь вызвать IsKeyPressed(VK_INSERT, false), у меня закрывается приложение.
bool keyState[*(&keysCodes + 1) - keysCodes]; // true - pressed; false - not pressed;
bool keyStateSecond[*(&keysCodes + 1) - keysCodes];
int keysLength = *(&keysCodes + 1) - keysCodes;
int FindKeyIndex(DWORD key)
{
for (int i = 0; i < keysLength; i++)
{
if (key == keysCodes[i])
{
return i;
}
}
return 0;
}
void CheckInput(UINT uMsg, WPARAM wParam)
{
switch (uMsg)
{
case WM_KEYDOWN:
for (int i = 0; i < keysLength; i++)
{
if (wParam == keysCodes[i])
{
keyState[i] = true;
break;
}
}
break;
case WM_KEYUP:
for (int i = 0; i < keysLength; i++)
{
if (wParam == keysCodes[i])
{
keyState[i] = false;
if (keyStateSecond[i])
{
keyStateSecond[i] = false;
}
break;
}
}
break;
default:
break;
}
}
bool IsKeyPressed(DWORD key, bool repeat = true)
{
int keyIndex = FindKeyIndex(key);
if (repeat)
{
return keyState[keyIndex];
}
if (keyState[keyIndex] && !keyStateSecond[keyIndex])
{
keyStateSecond[keyIndex] = true;
return true;
}
return false;
}
Ответы (1 шт):
Автор решения: Zhihar
→ Ссылка
FindKeyIndex у вас как-то странно работает - если ничего не находит, то выводит 0, а если находит значение в 0 элементе массива - тоже выводит 0
и еще - можете этот код пояснить:
*(&keysCodes + 1) - keysCodes
что вы этим добиться хотите