Gesty myszy w WinAPI
krstk
Porada traktuje o gestach myszy w WinAPI.
1) Dodajemy nagłówek:
#include <windowsx.h>
2) Deklarujemy zmienne:
bool a = false;
int y1, x1, y, x;
HWND hwnd;
3) W procedurze zdarzeniowej piszemy:
case WM_MBUTTONDOWN:
a = true;
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
break;
case WM_MBUTTONUP:
x1 = GET_X_LPARAM(lParam);
y1 = GET_Y_LPARAM(lParam);
if(y + 15 > y1 && y - 15 < y1 && x < x1)// 15 pikseli poziomej martwej strefy, user raczej nie przesunie kursora w idealnym pionie
{
//instrukcje przy ruchu myszą w prawo
}
if(y + 15 > y1 && y - 15 < y1 && x > x1)
{
// przy geście w lewo
}
if(x + 15 > x1 && x - 15 < x1 && y > y1)
{
// przy geście w dół
}
if(x + 15 > x1 && x - 15 < x1 && y < y1)
{
// przy geście w górę
}
break;
Aby wykonać gest należy przytrzymać środkowy przycisk myszy (scroll), ale jak ktoś nie chce zajmować przycisku myszy, to można po instrukcji Switch wstawić kod:
if(message == WM_MBUTTONDOWN and wParam & MK_SHIFT);
{
a = true;
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
}
if(message == WM_MBUTTONUP and wParam & MK_SHIFT)
{
x1 = GET_X_LPARAM(lParam);
y1 = GET_Y_LPARAM(lParam);
if(y + 15 > y1 && y - 15 < y1 && x < x1)
{
//instrukcje przy ruchu myszą w prawo
}
if(y + 15 > y1 && y - 15 < y1 && x > x1)
{
// przy geście w lewo
}
if(x + 15 > x1 && x - 15 < x1 && y > y1)
{
// przy geście w dół
}
if(x + 15 > x1 && x - 15 < x1 && y < y1)
{
// przy geście w górę
}
}
...albo w instrukcji Switch:
case WM_MBUTTONDOWN:
if(wParam & MK_SHIFT)
{
a = true;
x = GET_X_LPARAM(lParam);
y = GET_Y_LPARAM(lParam);
}
break;
case WM_MBUTTONUP:
if(wParam & MK_SHIFT)
{
x1 = GET_X_LPARAM(lParam);
y1 = GET_Y_LPARAM(lParam);
if(y + 15 > y1 && y - 15 < y1 && x < x1)
{
//instrukcje przy ruchu myszą w prawo
}
if(y + 15 > y1 && y - 15 < y1 && x > x1)
{
// przy geście w lewo
}
if(x + 15 > x1 && x - 15 < x1 && y > y1)
{
// przy geście w dół
}
if(x + 15 > x1 && x - 15 < x1 && y < y1)
{
// przy geście w górę
}
}
break;
Tym razem gesty będą używane tylko przy przytrzymaniu klawisza Shift. Równie dobrze można napisać MK_ALT (Alt) lub MK_CONTROL (Control) i MK_RETURN (Enter).