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