首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C# WPF上使用Pinvoke擦除桌面上绘制的对象

在C# WPF上使用Pinvoke擦除桌面上绘制的对象
EN

Stack Overflow用户
提问于 2013-09-08 21:40:12
回答 1查看 561关注 0票数 1

我正在尝试为需要使用多个桌面光标的https://www.leapmotion.com设备创建一个接口程序。因为windows不允许多个光标,所以我的第一个任务是创建一个可以在桌面和其他窗口中移动的可视光标。

我现在的方法是实现一个循环,并在清除光标对象的同时连续绘制它。绘图部分工作正常,但我在清除部分时遇到问题。我尝试在Pinvoke中使用RedrawWindow(),但是下面的代码在测试过程中崩溃了。

错误消息:对'WpfApplication1!WpfApplication1.MainWindow::RedrawWindow‘函数PInvoke的调用使堆栈不平衡。这可能是因为托管PInvoke签名与非托管目标签名不匹配。检查PInvoke签名的调用约定和参数是否与目标非托管签名匹配。

感谢任何可以提供的建议。

代码语言:javascript
运行
复制
    [DllImport("user32.dll")]
    static extern int RedrawWindow(IntPtr hWnd, [In] ref RECT lprcUpdate, IntPtr hrgnUpdate, uint flags);

    ....

    private void Timer_Tick(object sender, EventArgs e)
    {
        using (Graphics g = Graphics.FromHwnd(IntPtr.Zero))
        {

            ///throw new NotImplementedException();
            System.Drawing.Point pt = System.Windows.Forms.Cursor.Position;



            System.Drawing.Rectangle rect = new System.Drawing.Rectangle(new System.Drawing.Point(pt.X - 10, pt.Y - 10), new System.Drawing.Size(20, 20));


            g.DrawEllipse(Pens.Black, rect);

            g.Dispose();

            RECT rc = new RECT( pt.X - 20, pt.Y - 20, pt.X + 20, pt.Y + 20 );

            RedrawWindow(IntPtr.Zero, ref rc, IntPtr.Zero, 0x0400/*RDW_FRAME*/ | 0x0100/*RDW_UPDATENOW*/| 0x0001/*RDW_INVALIDATE*/);

        }

    }

编辑:

我已经根据Alex Farber的建议修改了上面的代码。(谢谢!)

我还根据Sriram Sakthivel的建议添加了额外的引用。因此,现在它可以毫无错误地编译和运行,但是绘制的椭圆仍然不会被RedrawWindow()命令清除。

你知道哪里出问题了吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-08 22:05:09

我认为问题在于P/Invoke声明中缺少ref

代码语言:javascript
运行
复制
 [DllImport("user32.dll")]
    static extern bool RedrawWindow(IntPtr hWnd, [In] ref RECT lprcUpdate, IntPtr hrgnUpdate, uint flags);

并将其称为

代码语言:javascript
运行
复制
RedrawWindow(IntPtr.Zero, ref rc, IntPtr.Zero, ...);
                          ^ Note ref keyword here
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18684323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档