2

在将其标记为本文的副本之前,请知道我要求的比该问题的答案提供的更清晰和具体。

具体来说,我想知道如何在 C# 中构建WM_TOUCH消息并将其发送出去。

它上面的文档(上面链接)讲述了它的组成以及如何收集它发送的信息,但它没有说明如何实际构建 WM_TOUCH 消息,而且我对 C# 的了解还不够多,无法使用我的东西已经能够找到了。

我知道它应该看起来像这样:

[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMSg, IntPtr wParam, IntPtr lParam);

/* code to make wParam and lParam */

SendMessage(HWND_BROADCAST, WM_TOUCH, _wParam, _lParam);

wParam 将是一个 int,它告诉在 lParam 中找到了多少多点触控点。根据 msdn 页面,lParam 本身“包含一个触摸输入句柄,可用于调用GetTouchInputInfo以检索有关与此消息关联的触摸点的详细信息” 。GetTouchInputInfo 函数返回 TOUCINPUT结构

我的问题是如何在 C# 中构建 TOUCHINPUT 结构(因为文档是 C++ 中的),以及如何通过SendMessage()函数传递该信息,以便我可以将 kinect 视为任何多点触控设备中的通用多点触控设备。触摸应用。

4

1 回答 1

1

您将需要在 C# 代码中表示 C++ 结构。
一旦有了 C# 结构,就可以将其用作输入或输出参数。
我发现转换这些结构的最佳方法是使用 P/Invoke Interop Assistant,网址为:http ://clrinterop.codeplex.com/releases/view/14120

从您发布的链接中复制 TOUCINPUT 结构会给出以下输出:

[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]
public struct TOUCHINPUT {
    /// LONG->int
    public int x;
    /// LONG->int
    public int y;
    /// HANDLE->void*
    public System.IntPtr hSource;
    /// DWORD->unsigned int
    public uint dwID;
    /// DWORD->unsigned int
    public uint dwFlags;
    /// DWORD->unsigned int
    public uint dwMask;
    /// DWORD->unsigned int
    public uint dwTime;
    /// ULONG_PTR->unsigned int
    public uint dwExtraInfo;
    /// DWORD->unsigned int
    public uint cxContact;
    /// DWORD->unsigned int
    public uint cyContact;
}
于 2012-08-27T08:25:00.373 回答