C# 带WPF的SlimDX RawInput

C# 带WPF的SlimDX RawInput,c#,wpf,slimdx,raw-input,C#,Wpf,Slimdx,Raw Input,我正在尝试使用SlimDX和RawInput为一个空间游戏设置键盘和鼠标控件。我目前的代码如下: Device.RegisterDevice(UsagePage.Generic, UsageId.Keyboard, DeviceFlags.None); Device.KeyboardInput += new EventHandler<KeyboardInputEventArgs>(keyboardInput); Device.RegisterDevice(UsagePage.Gene

我正在尝试使用SlimDX和RawInput为一个空间游戏设置键盘和鼠标控件。我目前的代码如下:

Device.RegisterDevice(UsagePage.Generic, UsageId.Keyboard, DeviceFlags.None);
Device.KeyboardInput += new EventHandler<KeyboardInputEventArgs>(keyboardInput);
Device.RegisterDevice(UsagePage.Generic, UsageId.Mouse, DeviceFlags.None);
Device.MouseInput += new EventHandler<MouseInputEventArgs>(mouseInput);
不过,我不能确定的是:

1) 既然我必须使用一个目标,那么我应该设置什么作为目标呢


2) 这条IntPtr消息是从哪里得到的?

这可能会有所帮助,我做这条消息是为了打乒乓球。希望能有帮助

            private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            spaceKeyDown = true;
        }
        if (e.KeyCode == Keys.Up)
        {
            spaceKeyUp = true;
        }
        if (e.KeyCode == Keys.W)
        {
            spaceKeyW = true;
        }
        if (e.KeyCode == Keys.S)
        {
            spaceKeyS = true;
        }
        if (direction == 0)
        {
            if (e.KeyCode == Keys.Space)
            {
                Random rand = new Random();
                direction = rand.Next(1, 5);
            }
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            spaceKeyDown = false;
        }
        if (e.KeyCode == Keys.Up)
        {
            spaceKeyUp = false;
        }
        if (e.KeyCode == Keys.W)
        {
            spaceKeyW = false;
        }
        if (e.KeyCode == Keys.S)
        {
            spaceKeyS = false;
        }
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (spaceKeyDown == true)
        {
            if (p2y < picPicture.Height - Paddle2.Height)
                p2y += 15;
        }
        if (spaceKeyUp == true)
        {
            if (p2y > 0)
                p2y -= 15;
        }
        if (spaceKeyS == true)
        {
            if (p1y < picPicture.Height - Paddle1.Height)
                p1y += 15;
        }
        if (spaceKeyW == true)
        {
            if (p1y > 0)
                p1y -= 15;
        }
    }
private void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
if(e.KeyCode==Keys.Down)
{
spaceKeyDown=true;
}
if(e.KeyCode==Keys.Up)
{
spaceKeyUp=true;
}
if(e.KeyCode==Keys.W)
{
spaceKeyW=真;
}
if(e.KeyCode==Keys.S)
{
空格键=真;
}
如果(方向==0)
{
if(e.KeyCode==Keys.Space)
{
Random rand=新的Random();
方向=rand.Next(1,5);
}
}
}
私有void Form1\u KeyUp(对象发送方,KeyEventArgs e)
{
if(e.KeyCode==Keys.Down)
{
spaceKeyDown=false;
}
if(e.KeyCode==Keys.Up)
{
spaceKeyUp=false;
}
if(e.KeyCode==Keys.W)
{
spaceKeyW=假;
}
if(e.KeyCode==Keys.S)
{
空格键=假;
}
}
私有无效计时器1_刻度(对象发送方,事件参数e)
{
if(spaceKeyDown==true)
{
如果(p2y0)
p2y-=15;
}
如果(空格键==true)
{
如果(p1y0)
p1y-=15;
}
}

它不是要你的窗口句柄吗?要目标吗?我认为可能是这样,但如果不解决第2部分,我就无法正确地测试它。您可以使用System.Windows.Interop.WindowInteropHelper类获得WPF窗口的句柄,只需创建一个新实例,将窗口引用作为构造函数参数传递,它的句柄属性是IntPtrOh,我明白了。如果这是句柄,那么作为目标传入的是什么?或者我应该将其设置为null。遗憾的是,SimDX文档并没有提到它所涉及的内容,这是一个与C++ DirectX SDKThanks、迪伦——这实际上是我现在工作的系统背离的情况之一。然而,我希望得到一些使用RawInput解析控件的东西,因为我听说它可以更快速地响应(我正在做一个太空射击游戏,所以在一场大战中,控制器延迟可能是灾难性的)。
            private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            spaceKeyDown = true;
        }
        if (e.KeyCode == Keys.Up)
        {
            spaceKeyUp = true;
        }
        if (e.KeyCode == Keys.W)
        {
            spaceKeyW = true;
        }
        if (e.KeyCode == Keys.S)
        {
            spaceKeyS = true;
        }
        if (direction == 0)
        {
            if (e.KeyCode == Keys.Space)
            {
                Random rand = new Random();
                direction = rand.Next(1, 5);
            }
        }
    }

    private void Form1_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Down)
        {
            spaceKeyDown = false;
        }
        if (e.KeyCode == Keys.Up)
        {
            spaceKeyUp = false;
        }
        if (e.KeyCode == Keys.W)
        {
            spaceKeyW = false;
        }
        if (e.KeyCode == Keys.S)
        {
            spaceKeyS = false;
        }
    }
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (spaceKeyDown == true)
        {
            if (p2y < picPicture.Height - Paddle2.Height)
                p2y += 15;
        }
        if (spaceKeyUp == true)
        {
            if (p2y > 0)
                p2y -= 15;
        }
        if (spaceKeyS == true)
        {
            if (p1y < picPicture.Height - Paddle1.Height)
                p1y += 15;
        }
        if (spaceKeyW == true)
        {
            if (p1y > 0)
                p1y -= 15;
        }
    }