Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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
WM#U MOUSEWHEEL在WinAPI(C+;+;)中其他事件仍在运行时停止工作 我在C++ WiLAPI应用程序中有一个奇怪的问题。_C++_Windows_Winapi_Mouseevent_Wndproc - Fatal编程技术网

WM#U MOUSEWHEEL在WinAPI(C+;+;)中其他事件仍在运行时停止工作 我在C++ WiLAPI应用程序中有一个奇怪的问题。

WM#U MOUSEWHEEL在WinAPI(C+;+;)中其他事件仍在运行时停止工作 我在C++ WiLAPI应用程序中有一个奇怪的问题。,c++,windows,winapi,mouseevent,wndproc,C++,Windows,Winapi,Mouseevent,Wndproc,当我运行我的应用程序时,滚动条会工作,每次我使用它时都会看到MessageBox。 但是,然后,我点击这里和那里,改变窗口,回到我的和。。。除了鼠标滚动(程序不接收消息,也不显示消息框,而LBM、RBM和按键工作正常,程序会对它们做出反应)之外,所有功能都正常工作 有可能是由于我在程序中执行的SetCapture/ReleaseCapture如果不是,那么除了鼠标滚动(从一开始就工作)以外,还有什么会导致这种奇怪的行为。 我有一个典型的呼叫循环: while(GetMessage (&m

当我运行我的应用程序时,滚动条会工作,每次我使用它时都会看到MessageBox。 但是,然后,我点击这里和那里,改变窗口,回到我的和。。。除了鼠标滚动(程序不接收消息,也不显示消息框,而LBM、RBM和按键工作正常,程序会对它们做出反应)之外,所有功能都正常工作

有可能是由于我在程序中执行的SetCapture/ReleaseCapture如果不是,那么除了鼠标滚动(从一开始就工作)以外,还有什么会导致这种奇怪的行为。

我有一个典型的呼叫循环:

while(GetMessage (&msg, NULL, 0, 0) > 0){
     TranslateMessage(&msg);
     DispatchMessage(&msg);
}
和我的事件处理程序:

LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){
switch(message){
    case WM_MOUSEMOVE:
        {   
            //fun stuff here
        }
        break;
    case WM_MOUSEWHEEL:
        {
            MessageBox(NULL, L"MouseWheel", L"MouseWheel", NULL);
            //even more fun stuff here
        }
        break;
    case WM_CREATE:
        {   
        }
        break;
    case WM_CTLCOLORSTATIC:
        {
            //...
            return (LRESULT)GetStockObject(NULL_BRUSH);
        }
        break;
    case WM_PAINT:
        engine->render();
        break;
    case WM_DESTROY:
                PostQuitMessage(0);
        break;
    case WM_LBUTTONDOWN:
        {
            //fun stuff
        }
        break;

    case WM_LBUTTONUP:
        {
            //fun stuff
        }
        break;
    case WM_CHAR:
        switch(wParam){
            //...
        }
        break;

    case WM_SETCURSOR:
        view->refreshCursor();
        break;

    case WM_KEYDOWN:
        switch (wParam){
            /...
        }
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
}

return 0;
}
可能是因为我的窗口未激活?LMB将起作用,因为它将使其也处于活动状态。但是当我的窗口未激活时,悬停(使用mousemove完成)仍然有效。如何捕获鼠标滚轮,即使在窗口未激活的情况下

当鼠标滚轮旋转时发送到焦点窗口


您是否尝试spy++来确定事件是否真的没有发送?鼠标滚轮消息会发送到具有焦点的窗口-如果您的窗口未处于活动状态,则根据定义它没有焦点。但在WM_MOUSEMOVE下,我添加了设置焦点(hwnd);同样的结果。另外,我确实从mousemove接收消息(因此我将我的元素悬停在它的基础上)。@PolGraphic我打赌你的SetFocus调用没有激活你的窗口,对吧?我想这是真的。当我点击窗口时,它会获得焦点,当我使用SetFocus或SetActiveWindow时,我的窗口仍然不是“在顶部”(“活动”)。