Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;注册一次鼠标点击_C++_Mouseevent - Fatal编程技术网

C++ C++;注册一次鼠标点击

C++ C++;注册一次鼠标点击,c++,mouseevent,C++,Mouseevent,我有一个关于在一个热点上注册一次鼠标点击的问题——它给了我各种各样的问题,我似乎在这里,在我的任何一本书中,或者在谷歌上都找不到答案。我只做了几个月的编程工作,所以请容忍我 我已经成功地创建了一个(虽然很原始,也不是很优雅)热盒,其中有人在按钮上滚动,他们的图标会发生变化。如果他们点击按钮,它会在另一个屏幕上填充一个向量并播放声音。没关系。然而,我正在使用的代码对MouseLButton down操作进行计数——这意味着,由于循环,MouseLButton down一直被注册。如何使此代码将操作

我有一个关于在一个热点上注册一次鼠标点击的问题——它给了我各种各样的问题,我似乎在这里,在我的任何一本书中,或者在谷歌上都找不到答案。我只做了几个月的编程工作,所以请容忍我

我已经成功地创建了一个(虽然很原始,也不是很优雅)热盒,其中有人在按钮上滚动,他们的图标会发生变化。如果他们点击按钮,它会在另一个屏幕上填充一个向量并播放声音。没关系。然而,我正在使用的代码对MouseLButton down操作进行计数——这意味着,由于循环,MouseLButton down一直被注册。如何使此代码将操作计算为一次单击,然后在用户再次单击之前不执行任何操作:

OfficeManager.cpp:

void Hire::hireScreenNavigation()
{
if ((input->getMouseLButton()) && (input->getMouseX() > 900 && input->getMouseX() < 940) && (input->getMouseY() > 154 && input->getMouseY() < 174))
{
    audio->playCue (CLICK_EXPAND);
    hire = true;
    Office.push_back (HireRecruitmentPool[0]);
    --officeCapacity;
}

if ((hireScreenSwitch==true) && (input->getMouseX() > 900 && input->getMouseX() < 940) && (input->getMouseY() > 154 && input->getMouseY() < 174))
{
    SetCursor(LoadCursor(NULL,IDC_HAND));
}
如果有任何人有任何关于如何编码的例子,使上面的租用功能在这些坐标范围内计数一次点击(而不是鼠标按下),我将非常感激。请记住,游戏中每个按钮的热点坐标都是不同的

谢谢2.在启动事件之前不要做任何事情。此时,检查鼠标位置是否仍在最初命中的项目上方。如果是这样,请考虑成功点击该项目并进行您需要的任何处理。 谢谢你的回答,非常感谢。不过,我想知道针对这些语句进行测试的语义。我似乎不缺少针对鼠标按下(input->GetMouseButton)或((GetKeyState(VK_LBUTTON)&0x8000)进行测试的方法。但当我尝试针对左上鼠标进行测试时,什么都没有发生。我使用的是(WM_LBUTTONUP)当我这样做的时候-没有效果。我怀疑我没有正确地使用它…第一件事是确认switch语句中的button down case被击中了。如果是这样,那么可能在处理代码的某个地方有一个小错误。如果你能发布代码,我可以尝试提供更多帮助。如果这个case没有被击中,那么还有其他一些东西出了问题。但我现在打赌不是。你能证实它被击中了吗?
if(initialized)
{
    switch( msg )
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
        case WM_KEYDOWN: case WM_SYSKEYDOWN:
            input->keyDown(wParam);
            return 0;
        case WM_KEYUP: case WM_SYSKEYUP:
            input->keyUp(wParam);
            return 0;
        case WM_CHAR:
            input->keyIn(wParam);
            return 0;
        case WM_MOUSEMOVE:
            input->mouseIn(lParam);
            return 0;
        case WM_INPUT:
            input->mouseRawIn(lParam);
            return 0;
        case WM_LBUTTONDOWN:
            input->setMouseLButton(true);
            input->mouseIn(lParam);
            clicked = true;
            return 0;
        case WM_LBUTTONUP:
            input->setMouseLButton(false);
            input->mouseIn(lParam);
            return 0;
        case WM_MBUTTONDOWN:
            input->setMouseMButton(true);
            input->mouseIn(lParam);
            return 0;
        case WM_MBUTTONUP:
            input->setMouseMButton(false);
            input->mouseIn(lParam);
            return 0;
        case WM_RBUTTONDOWN:
            input->setMouseRButton(true);
            input->mouseIn(lParam);
            return 0;
        case WM_RBUTTONUP:
            input->setMouseRButton(false);
            input->mouseIn(lParam);
            return 0;
    }
}
return DefWindowProc( hwnd, msg, wParam, lParam );