如何检查是否为控件启用了触摸手势?

Jag*_*san 6 c# gesture-recognition touch gestures winforms

在Windows窗体控件中,我已使用SetGestureConfig方法正确配置了触摸手势.它正确配置了控件的触摸手势.在某些情况下,我需要检查控件是否正确启用了特定的触摸手势.我尝试使用GetGestureConfig方法来检查是否启用了特定手势.但是这种方法总是 单独返回false值.而且我尝试使用GetLastError()方法获取错误消息,但它始终返回值0.请找到下面的代码,

        int gestureConfigSize = Marshal.SizeOf(new GESTURECONFIG());
        GESTURECONFIG gc = new GESTURECONFIG();
        gc.dwID = 0;
        gc.dwWant = WindowMessages.GC_ALLGESTURES;
        gc.dwBlock = 0;
        if (SetGestureConfig(control.Handle, 0, 1, ref gc, gestureConfigSize))
            MessageBox.Show("Zoom gesture configured properly");

        GESTURECONFIG gc1 = new GESTURECONFIG();
        gc1.dwID = 0;
        gc1.dwWant = WindowMessages.GC_ALLGESTURES;
        gc1.dwBlock = 0;
        GESTURECONFIG[] gestures = new GESTURECONFIG[] { gc1 };

        bool value = GetGestureConfig(control.Handle, 0, 0, 1, gestures, gestureConfigSize);
        if (!value)
        {
            int errorValue = GetLastError();
        }
Run Code Online (Sandbox Code Playgroud)

请在下面找到Dll导入代码,

    [DllImport("Kernel32.dll")]
    static extern Int32 GetLastError();

    [DllImport("user32")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SetGestureConfig(IntPtr hWnd, int dwReserved, int cIDs, [In] [Out] GESTURECONFIG[] pGestureConfig, int cbSize);

    [DllImport("user32")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool SetGestureConfig(IntPtr hWnd, int dwReserved, int cIDs, ref GESTURECONFIG pGestureConfig, int cbSize);

    [DllImport("user32")]
    [return: MarshalAs(UnmanagedType.Bool)]
    public static extern bool GetGestureConfig(IntPtr hWnd, int dwReserved, int flags, int cIDs, [In] [Out] GESTURECONFIG[] pGestureConfig, int cbSize);
Run Code Online (Sandbox Code Playgroud)

请建议如何使用GetGestureConfig方法检查是否为控件启用了触控手势.

谢谢.

小智 0

  1. 您不应该[DllImport]在托管代码中自行 GetLastError,请调用Marshal.GetLastError(请参阅https://blogs.msdn.microsoft.com/adam_nathan/2003/04/25/getlasterror-and-management-code/)了解更多详细信息。
  2. 为此,您需要SetLastError=true在您的文件中设置标志[DllImport]以确保捕获错误。