#pragma comment(lib, "user32.lib") void Example::setup(QWindow *main_window) { s_window = main_window; s_windowHandle = (HWND)main_window->winId(); s_oldWindowProc = (WNDPROC)GetWindowLongPtr(s_windowHandle, GWLP_WNDPROC); SetWindowLongPtr(s_windowHandle, GWLP_WNDPROC, (LONG_PTR)(WNDPROC)pointGrabWindowProc); } LRESULT CALLBACK Example::pointGrabWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if(msg == WM_POINTERDOWN) { DWORD id = GET_POINTERID_WPARAM(wParam); POINTER_INFO pi; GetPointerInfo(id, &pi); qDebug() << "POINTER DOWN" << id; } else if(msg == WM_POINTERUP) { DWORD id = GET_POINTERID_WPARAM(wParam); POINTER_INFO pi; GetPointerInfo(id, &pi); qDebug() << "POINTER UP" << id; } else if(msg == WM_POINTERUPDATE) { DWORD id = GET_POINTERID_WPARAM(wParam); POINTER_INFO pi; GetPointerInfo(id, &pi); qDebug() << "POINTER UPDATE" << id; } return CallWindowProc(s_oldWindowProc, hwnd, msg, wParam, lParam); } QMutex TangibleEngineBinding::s_mutex; HWND TangibleEngineBinding::s_windowHandle; WNDPROC TangibleEngineBinding::s_oldWindowProc; QWindow * TangibleEngineBinding::s_window;