C++ WINAPI您自己的键盘ON按下并松开

C++ WINAPI您自己的键盘ON按下并松开,c++,keyboard,window,C++,Keyboard,Window,目前,我正在创建自己的函数onPress和onRelease。但是,我的onRelease函数有问题。显然,即使我没有释放键盘,onRelease也会不断触发 我怀疑这与CPU内部的循环数有关,但我不确定这个理论。不知何故,也许循环比我的帧慢,这就是为什么PeerMessage返回false?因为没有触发任何事件 解决方案: **在WinProc函数下创建一个名为WM_KEYUP的新案例。一旦用户离开按钮,将触发此事件。它有助于解决CPU内部发出的周期数。 ** *注: 我已经更新了代码的详细信

目前,我正在创建自己的函数onPress和onRelease。但是,我的onRelease函数有问题。显然,即使我没有释放键盘,onRelease也会不断触发

我怀疑这与CPU内部的循环数有关,但我不确定这个理论。不知何故,也许循环比我的帧慢,这就是为什么PeerMessage返回false?因为没有触发任何事件

解决方案: **在WinProc函数下创建一个名为WM_KEYUP的新案例。一旦用户离开按钮,将触发此事件。它有助于解决CPU内部发出的周期数。 **

*注: 我已经更新了代码的详细信息

描述。窗口编程 我有两个std::数组存储我的键盘数据 1) 输入电流 2) 输入前置

std::array<char, 256> inputPrev;
std::array<char, 256> inputCurr;

While(TRUE) {
    std::copy(InputCurr.begin(), InputCurr.end(), InputPrev.begin());
    inputCurr.fill(0);

    while(PeekMessage (&uMsg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage (&uMsg);
        DispatchMessage (&uMsg);
    }

    if(onReleased(x030))  //Button 0
    //do something
}

char onReleased(char key)
{
    return (inputCurr[key] && !inputPrev[key])? 1 : 0;
}

void VEInputMessage(WPARAM key)
{
    inputCurr[key]= 1;  //Set to true of the keyboard key
}

LRESULT CALLBACK WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) 
{
    HDC dc;           /* device context */
    PAINTSTRUCT ps;   /* the paint struct */
    RECT rect;

    UNREFERENCED_PARAMETER(rect);

    switch (msg)
    {
    /* when the window is created */
    case WM_CREATE:
        break;

    /* when the rectangle is drawn */
    case WM_LBUTTONDOWN:
            break;

    case WM_MOUSEMOVE:
        break;

    case WM_PAINT:
        dc = BeginPaint(hWnd, &ps);
        EndPaint(hWnd, &ps);
        break;

    /* When it's time for the window to be closed and removed */
    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_KEYDOWN:
        VEINPUT::VEInputMessage(wParam);  //Updated the input key 
        if(wParam == AEVK_ESCAPE)
            PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    return 0;
}
std::数组inputPrev;
std::数组输入电流;
While(TRUE){
std::copy(InputCurr.begin(),InputCurr.end(),inputprov.begin());
输入电流填充(0);
while(peek消息(&uMsg,NULL,0,0,PM_-REMOVE))
{
翻译信息(uMsg);
调度消息(&uMsg);
}
if(onReleased(x030))//按钮0
//做点什么
}
char onReleased(char键)
{
返回(inputCurr[key]&&!inputPrev[key])?1:0;
}
void VEInputMessage(WPARAM密钥)
{
inputCurr[key]=1;//将键盘键设置为true
}
LRESULT回调WinProc(HWND HWND,UINT msg,WPARAM WPARAM,LPARAM LPARAM)
{
HDC dc;/*设备上下文*/
PAINTSTRUCT ps;/*绘制结构*/
RECT-RECT;
未引用的_参数(rect);
开关(msg)
{
/*创建窗口时*/
案例WM_创建:
打破
/*绘制矩形时*/
案例WM_LBUTTONDOWN:
打破
案例WM_MOUSEMOVE:
打破
案例WM_油漆:
dc=开始修复(hWnd和ps);
端漆(hWnd和ps);
打破
/*何时关闭和移除窗口*/
案例WM_销毁:
PostQuitMessage(0);
打破
案例WM_键控:
VEINPUT::VEInputMessage(wParam);//更新了输入键
if(wParam==AEVK_ESCAPE)
PostQuitMessage(0);
打破
违约:
返回DefWindowProc(hWnd、msg、wParam、lParam);
}
返回0;
}

My keyUp不起任何作用。KeyDown将调用我的另一个函数,该函数将找到正确的键并将inputCurr[key]设置为1。我正在使用WParam。您应该在问题中包含该代码,因为它提供的逻辑与您的问题极为相关。您已经提供的代码没有告诉我们任何信息。