I. Windows 7 est arrivé avec la gestion du multi-touch ? Quels sont les messages Windows Associés ?

Bien que le multi-touch ne soit pas une nouveauté en tant que telle, Windows 7 est le premier système de Microsoft fournissant un support natif de cette technologie.

Pour supporter cette technologie, plusieurs messages Windows ont été rajoutés au système, dont :

  • WM_TOUCH : Qui permet de récupérer les informations liées à une pression sur l'écran (nombre de pressions au total, coordonnées etc...)
  • WM_GESTURE : Qui permet de récupérer un mouvement (un geste) particulier, réalisé par l'utilisateur sur la surface de l'écran. Windows 7 reconnaît nativement plusieurs gestuelles, telles que la rotation, le changement d'échelle (zoom et dé zoom), la pression sur l'écran, la distance entre deux doigts.
Gestion du message WM_TOUCH
Sélectionnez
case WM_TOUCH:
{
	// Un message WM_TOUCH peut contenir plusieurs messages provenant de differents contactes
	unsigned int numInputs = (int) wParam;      // Nombres de contactes
	TOUCHINPUT* ti = new TOUCHINPUT[numInputs]; // 
            
	if (GetTouchInputInfo((HTOUCHINPUT)lParam, numInputs, ti, sizeof(TOUCHINPUT)))
	{
		for (unsigned int i=0; i<numInputs; ++i)
		{
			if (ti[i].dwFlags & TOUCHEVENTF_DOWN)
			{
				OnTouchDownHandler(hWnd, ti[i]);
			}
		else if (ti[i].dwFlags & TOUCHEVENTF_MOVE)
		{
			OnTouchMoveHandler(hWnd, ti[i]);
		}
		else if (ti[i].dwFlags & TOUCHEVENTF_UP)
		{
			OnTouchUpHandler(hWnd, ti[i]);
		}
	}
}
CloseTouchInputHandle((HTOUCHINPUT)lParam);
delete [] ti;
}
Gestion du message WM_GESTURE
Sélectionnez
// Entry point to the application
LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
// Create a structure to populate and retrieve the extra message info.
GESTUREINFO gi;  
ZeroMemory(&gi, sizeof(GESTUREINFO));
gi.cbSize = sizeof(GESTUREINFO);

BOOL bResult  = GetGestureInfo((HGESTUREINFO)lParam, &gi);
BOOL bHandled = FALSE;

if (bResult){
	// now interpret the gesture
	switch (gi.dwID){
		case GID_ZOOM:
        	// Code for zooming goes here     
			bHandled = TRUE;
			break;
		case GID_PAN:
			// Code for panning goes here
			bHandled = TRUE;
			break;
		case GID_ROTATE:
			// Code for rotation goes here
			bHandled = TRUE;
			break;
		case GID_TWOFINGERTAP:
			// Code for two-finger tap goes here
			bHandled = TRUE;
			break;
		case GID_PRESSANDTAP:
			// Code for roll over goes here
			bHandled = TRUE;
			break;
		default:
			// A gesture was not recognized
			break;
	}
}
else
{
	DWORD dwErr = GetLastError();
	if (dwErr > 0){
		//MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
	}
}
if (bHandled){
	return 0;
}
else
{
	return DefWindowProc(hWnd, message, wParam, lParam);
}
Pour plus d'infos :