У меня странная проблема в моем приложении WinAPI на C++.WM_MOUSEWHEEL перестает работать, пока в WinAPI (C++) все еще работает.
Когда я запускаю свое приложение, прокрутка работает, и я вижу MessageBox каждый раз, когда я его использую. Но тогда я нажимаю здесь и там, меняю окно, возвращаюсь к моему и ... все работает, за исключением прокрутки мыши (программа не получает сообщение и не появляется MessageBox, в то время как, например, LBM, RBM и клавиши работают просто отлично и программа реагирует на них).
Возможно, это связано с установкой SetCapture/ReleaseCapture, которую я выполняю во время программы? Если нет, то что может вызвать такое странное поведение, когда все работы задерживаются на мышином прокрутке (который работает с самого начала).
У меня есть цикл typicall:
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 ++ найти ли событие действительно не отправляется? – PMF
Сообщения о колесиках мыши отправляются в окно с фокусом - если ваше окно неактивно, то по определению оно не имеет фокуса. –