Hallo,
In meiner win32-Anwendung wird das Mausradereignis für die Horizontale nicht richtig empfangen.
Und zwar bekomm ich sowohl das horizontale- als auch das vertikale Ereignis über WM_MOUSEWHEEL
(beachte: WM_MOUSEWHEEL vs WM_MOUSEHWHEEL).
Nun kann ich nicht unterscheiden, welches Ereignis es ist.
Verwende: g++ 4.9.1 via MinGW, Win7x64
Hier wär mein minimal Code:
Meine Ausgabe dazu:
Leider fand ich im Netz auch nichts Brauchbares.
Hatte schon mal jemand dieses Problem?
mfg.
In meiner win32-Anwendung wird das Mausradereignis für die Horizontale nicht richtig empfangen.
Und zwar bekomm ich sowohl das horizontale- als auch das vertikale Ereignis über WM_MOUSEWHEEL
(beachte: WM_MOUSEWHEEL vs WM_MOUSEHWHEEL).
Nun kann ich nicht unterscheiden, welches Ereignis es ist.
Verwende: g++ 4.9.1 via MinGW, Win7x64
Hier wär mein minimal Code:
Code:
#include <windows.h>
#include <iostream>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int main()
{
WNDCLASS wc;
memset(&wc, 0, sizeof(WNDCLASS));
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandle(NULL);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 3);
wc.lpszClassName = "minimal";
if(!RegisterClass(&wc)) return 1;
if(!CreateWindow(wc.lpszClassName,
"Minimal Windows Application",
WS_OVERLAPPEDWINDOW|WS_VISIBLE,
0,0,640,480,0,0,GetModuleHandle(NULL),NULL)) return 2;
MSG msg;
while(GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
#ifndef WM_MOUSEHWHEEL //see: http://msdn.microsoft.com/en-us/library/windows/desktop/ms645614(v=vs.85).aspx
#define WM_MOUSEHWHEEL 0x020E
#endif
case WM_MOUSEHWHEEL:
std::cout << "horizontal wheel: " << GET_WHEEL_DELTA_WPARAM(wParam)
<< std::endl;
break;
case WM_MOUSEWHEEL:
std::cout << "vertical wheel: " << GET_WHEEL_DELTA_WPARAM(wParam)
<< std::endl;
break;
case WM_KEYDOWN:
if(wParam == VK_ESCAPE) DestroyWindow(hWnd);
break;
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}
Meine Ausgabe dazu:
Code:
vertical wheel: 120
vertical wheel: -120
vertical wheel: -840 <- sollte eigentlich ein horizontales Ereignis sein
Leider fand ich im Netz auch nichts Brauchbares.
Hatte schon mal jemand dieses Problem?
mfg.