我正在使用一个预先存在的代码库,希望用户在运行代码的任何时间键入任何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中接收字符代码。

10-04 11:38
查看更多