我正在使用一个预先存在的代码库,希望用户在运行代码的任何时间键入任何1-2位数字,然后按Enter键,然后将该数字传递给函数。当前,用户输入的处理方式如下:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
switch (message)
{
case WM_KEYDOWN:
Engine::GetInstance()->GetInput()->GetKeyboard()->SetKeyPressed(static_cast<int>(wParam));
break;
//snip
现在,我不确定几件事,
a)为什么按键会以整数而不是字符形式传递?
b)在这种情况下,发送“ F1”会是什么结果aaand
c)如何使用此方法来读取1-2位数字并仅在按Enter键时才通过该数字?
最佳答案
a)此处发送的值是虚拟键代码,不一定是字符。
b)请参见虚拟键代码here的列表(在注释中给出)。 F1将由VK_F1(0x70)表示。
c)当按下数字时,将其添加到包含最后一次按下数字的字符串中。当按任何其他键时,清除字符串。按下enter键后,根据字符串值进行操作。
编辑:这在WM_KEYDOWN
中会有点复杂,因为您将需要同时处理普通数字键和小键盘键。相反,将更容易处理WM_CHAR
消息,该消息在wParam中接收字符代码。