MultiTouch на C ++ Windows Пример приложения логика, которая строит - PullRequest
0 голосов
/ 16 марта 2019

Я разработчик на C #, но мне приходится устранять неполадки и исправлять наши устаревшие приложения C ++ (c ++ v110).На данный момент у нас есть клиент, который использовал свое устройство с сенсорным экраном с Windows 8.1 и нашу систему без проблем.Недавно он обновился до Windows 10, и теперь долгое нажатие правой кнопки мыши перестало работать.После долгих поисков, я подозреваю, что мне нужно вставить настоящий код C ++, который обнаруживает GESTUREINFO.Я посещал несколько сайтов, посвященных тому, как это сделать, например: https://docs.microsoft.com/en-us/windows/desktop/api/winuser/ns-winuser-taggestureinfo

Единственные функции, которые мне нужно поддерживать, - это щелчок левой кнопкой мыши и щелчок правой кнопкой мыши (длительное нажатие).

Я включил, но независимо от того, что я делаю, пример кода в ссылке выше, не может быть решен или встроен в мой код.Я обновил библиотеку до v141 и получил решение для сборки, но все еще не могу разрешить свои объекты GESTUREINFO.

Что еще мне нужно сделать, чтобы КРАСНЫЙ исчез?У кого-нибудь есть демонстрационное приложение, которое я могу загрузить, или ссылка на полное приложение, которое я вижу, чтобы увидеть, где мне не хватает чего-то, что не позволяет мне создавать?

Код, который я имею в наличии, довольнопросто, но я вижу только красный.

LRESULT CALLBACK CPlan::WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_GESTURE: //This is RED
    // Insert handler code here to interpret the gesture.            
    return DecodeGesture(hWnd, message, wParam, lParam);
}
}

LRESULT CPlan::DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
// Create a structure to populate and retrieve the extra message info.
GESTUREINFO gi;  //NOT Red

ZeroMemory(&gi, sizeof(GESTUREINFO));

gi.cbSize = sizeof(GESTUREINFO);  //cbSize not found, RED

BOOL bResult = GetGestureInfo((HGESTUREINFO)lParam, &gi); //GetGestureInfo not found, RED
BOOL bHandled = FALSE;

if (bResult) {
    // now interpret the gesture
    switch (gi.dwID) {
    case GID_ZOOM: //RED
        // Code for zooming goes here     
        bHandled = TRUE;
        break;
    case GID_PAN: //RED
        // Code for panning goes here
        bHandled = TRUE;
        break;
    case GID_ROTATE: //RED
        // Code for rotation goes here
        bHandled = TRUE;
        break;
    case GID_TWOFINGERTAP: //RED
        // Code for two-finger tap goes here
        bHandled = TRUE;
        break;
    case GID_PRESSANDTAP: //RED
        // 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);
}
}
...