Windows 在Win 7上在桌面上绘制线条非常慢

Windows 在Win 7上在桌面上绘制线条非常慢,windows,delphi,winapi,windows-7,windows-7-x64,Windows,Delphi,Winapi,Windows 7,Windows 7 X64,我用这段代码在所有窗口上用鼠标画一条线。我用鼠标钩子来获得鼠标坐标,当鼠标右键按下时,我在画线。我使用的是NOTXORPEN,因此我只能通过再次绘制来删除该行 初始化: 我在每次鼠标移动时都使用以下代码: LineTo(ScreenDC, X, Y); // Draw a Line between the prev Point to Current Point 这段代码适用于Windows95、98、2000和XP,但现在Windows7的速度非常慢 我在Delphi3中只使用Windows

我用这段代码在所有窗口上用鼠标画一条线。我用鼠标钩子来获得鼠标坐标,当鼠标右键按下时,我在画线。我使用的是
NOTXORPEN
,因此我只能通过再次绘制来删除该行

初始化:

我在每次鼠标移动时都使用以下代码:

LineTo(ScreenDC, X, Y); // Draw a Line between the prev Point to Current Point
这段代码适用于Windows95、98、2000和XP,但现在Windows7的速度非常慢

我在Delphi3中只使用Windows API编写了一个鼠标手势程序(编写于1999年)(鼠标钩子是在VC中编写的,因为Delphi在版本3中有缺陷)。这个程序正在做的正是它正在做的,但不知何故,StrokeIt设法找到了这个问题的解决方案

我的代码是Delphi的,但如果您能用任何语言回答,我们将不胜感激

我将更详细地解释我正试图构建什么。我的申请分为三部分:

  • 单击鼠标右键时的鼠标手势跟踪和存储
  • 基于有限形状数的手势识别
  • 宏激活基于启动手势时识别的手势和光标下的应用程序

  • 我很难让第1部分在Windows7(Vista)上运行,正如Martyn在他的回答中所说,我想我必须改变观念。现在,我正在通过上面附加的代码钩住鼠标消息和手势绘制来进行跟踪。。。我了解分层窗口的基本知识,但什么对我有用?你认为制作一个全屏最上面的tranparent窗口并在其上绘图可以完成这项工作吗?有人能帮我写下这方面的代码吗?

    在Windows Vista之前,桌面被绘制成一个实际的GDI表面,因此这种活动可以工作——尽管它的工作速度取决于GDI驱动程序的加速

    对于Vista和beyond,桌面窗口管理器使用DX将多个窗口(其中一些可能使用GDI,一些可能不使用GDI)合成为一个最终场景,并渲染到更新的驱动程序模型。因此,直接戳屏幕像素的速度要慢得多

    更根本的是,这不是完成事情的方式。我不太清楚您要构建什么,但您可能想了解分层窗口:它提供了一种受支持的、适当的方法,可以在实际应用程序之上创建更复杂的场景。它们还可以帮助您避免使用鼠标挂钩,这也是一个坏主意


    Martyn

    我在我的问题中添加了一些解释,你能回顾一下吗?看起来下一步是下载一些分层窗口示例代码,并了解它们在实践中是如何工作的。对不起,我没有时间给你写代码。
    LineTo(ScreenDC, X, Y); // Draw a Line between the prev Point to Current Point