Windows Touch的WM_GESTURE与WM_GESTURENOTIGY消息-中文整理
2013-05-04 23:25
1066 查看
节包含有关 Windows Touch 笔势的通知。本节中指定了以下通知。
注意 若要启用旧版支持,必须使用 DefWindowProc 转发带有 GID_BEGIN 和 GID_END 笔势命令的消息。下表指示在 lParam 和 wParam 参数中传递的笔势参数。
注意 所有距离和位置都以物理屏幕坐标形式提供。注意 只应将 dwID 和 ullArgument 参数视为随 GID_* 命令附带,并且应用程序不应更改这些参数。
通知 | 说明 |
---|---|
WM_GESTURE | 发送到窗口过程以传递有关笔势的信息。 |
WM_GESTURENOTIFY | 为您提供设置笔势配置的机会。 |
WM_GESTURE 消息
传递有关笔势的信息。MFC的CWnd类已经加载了这个消息,以虚函数的方式供集成的类使用,函数声明为LRESULT OnGesture(WPARAM wParam, LPARAM lParam);然后分配指派手势的不同虚函数执行相应的手势代码。参数
wParam提供标识笔势命令和特定于笔势的参数值的信息。此信息是在 GESTUREINFO 结构中的 ullArguments 成员中传递的相同信息。lParam提供标识笔势命令和特定于笔势的参数值的信息的句柄。可通过调用 GetGestureInfo 检索此信息。返回值
如果应用程序处理此消息,则它应返回 0。如果应用程序不处理此消息,则它必须调用 DefWindowProc。不执行此操作将导致应用程序泄露内存,因为将不会关闭触控输入句柄,并且将不会释放关联的进程内存。评论
下表列出了支持的笔势命令。笔势 ID | 值 (dwID) | 说明 |
---|---|---|
GID_BEGIN | 1 | 指示泛型笔势已开始。 |
GID_END | 2 | 指示泛型笔势已结束。 |
GID_ZOOM | 3 | 指示缩放开始、缩放移动或缩放停止。第一条 GID_ZOOM 命令消息开始缩放但不会导致任何缩放。第二条 GID_ZOOM 命令触发与第一条 GID_ZOOM 中包含的状态相关的缩放。 |
GID_PAN | 4 | 指示平移移动或平移开始。第一条 GID_PAN 命令指示平移开始但不会执行任何平移。在出现第二条 GID_PAN 命令消息时,应用程序将开始平移。 |
GID_ROTATE | 5 | 指示旋转移动或旋转开始。第一条 GID_ROTATE 命令消息指示旋转移动或旋转开始但不会进行旋转。第二条 GID_ROTATE 命令消息将触发与第一条 GID_ROTATE 中包含的状态相关的旋转操作。 |
GID_TWOFINGERTAP | 6 | 指示双指点击笔势。 |
GID_PRESSANDTAP | 7 | 指示按住并点击笔势。可以用来表示鼠标的右键动作。 |
笔势 ID | 笔势 | ullArgument | GestureInfo 结构中的 ptsLocation |
---|---|---|---|
GID_ZOOM | 放大/缩小 | 指示两个点之间的距离。 | 指示缩放中心。 |
GID_PAN | 平移 | 指示两个点之间的距离。 | 指示平移的当前位置。 |
GID_ROTATE | 旋转(支点) | 指示旋转角度(如果设置了 GF_BEGIN 标志)。否则,它是自旋转开始后的角度更改。此值将使用正负符号指示旋转的方向。使用 GID_ROTATE_ANGLE_FROM_ARGUMENT 和GID_ROTATE_ANGLE_TO_ARGUMENT 宏获取和设置角度值。 | 这将指示旋转的中心,即目标对象绕其旋转的固定点。 |
GID_TWOFINGERTAP | 双指点击 | 指示两个手指之间的距离。 | 指示两个手指的中心。 |
GID_PRESSANDTAP | 按住并点击 | 指示第一个手指和第二个手指之间的增量。此值将存储在 POINT 结构中的 ullArgument 的低 32 位中。 | 指示第一个手指按住的位置。 |
示例
以下代码演示如何获取与此消息关联的特定于笔势的信息。注意 应始终将未处理的消息转发给 DefWindowProc,并应关闭已通过调用 CloseGestureInfoHandle 处理的消息的笔势输入句柄。在此示例中,将禁止显示默认的笔势处理程序行为,因为每个笔势用例中已关闭 TOUCHINPUT 句柄。如果在上面的代码中删除未处理的消息的用例,则默认笔势处理程序会通过在默认用例中将消息转发给 DefWindowProc 来处理消息。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); } }
WM_GESTURENOTIFY 消息
为您提供设置笔势配置的机会。参数
wParam未使用。lParam一个指向 GESTURENOTIFYSTRUCT 的指针。返回值
应从 DefWindowProc 返回一个值。评论
当接收到 WM_GESTURENOTIFY 消息时,应用程序可使用 SetGestureConfig 指定要接收的笔势。始终应使用 DefWindowProc 函数向上冒泡传递此消息。注意 处理 WM_GESTURENOTIFY 消息将更改窗口生存期内(而不仅仅是下一个笔势)的笔势配置。示例
以下示例演示了如何启用所有笔势。有关更多示例,请参见 SetGestureConfig。switch (message) { case WM_GESTURENOTIFY: GESTURECONFIG gc = {0,GC_ALLGESTURES,0}; BOOL bResult = SetGestureConfig(hWnd,0,1,&gc,sizeof(GESTURECONFIG)); if(!bResult) { // an error } return DefWindowProc(hWnd, WM_GESTURENOTIFY, wParam, lParam); }
相关文章推荐
- Windows Touch的GESTURECONFIG,GESTUREINFO,GESTURENOTIFYSTRUCT结构体-中文整理
- Windows Touch应用程序疑难解答-中文整理
- Windows Touch 消息入门-中文这个理
- Windows Touch编程体系结构概述-中文整理
- Windows Touch编程选择使用适当方法-中文整理
- Windows 消息大全归类整理
- 详解Windows消息分类以及WM_COMMAND与WM_NOTIFY的区别,以及模拟发送控件通知消息
- 进程通信(用户自定义消息,用户注册消息,windows剪贴板,WM_COPY, 内存映射,对目标进程的内存)
- windows进程通信之消息和WM_COPYDATA
- 【整理】Windows 定时器 与自定消息
- (转)进程通信(用户自定义消息,用户注册消息,windows剪贴板,WM_COPY, 内存映射,对目标进程的内存)
- Windows消息----中文说明
- 详解Windows消息分类以及WM_COMMAND与WM_NOTIFY的区别,以及模拟发送控件通知消息
- MFC/Windows_WM_CTLCOLOR消息
- windows进程通信 -- WM_COPYDATA消息
- Windows GUI WM_PAINT消息一直发送的问题
- Windows程序设计零基础自学_2_Windows程序的显示和更新_之WM_PAINT消息
- View中消息传递:onTouch() +onInterceptTouchEvent() + GestureDetector 学习
- Windows 编程[10] - WM_LBUTTONDOWN、WM_LBUTTONUP 和 WM_MOUSEMOVE 消息
- windows消息中的WM_DESTORY消息