加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows – 桌面上的绘图线在Win 7上非常慢

发布时间:2020-12-14 02:53:52 所属栏目:Windows 来源:网络整理
导读:I.m使用此代码在所有窗口的顶部用鼠标绘制一条线.我正在使用鼠标钩来获取鼠标坐标,并且在鼠标右键按下时每次鼠标移动我正在画线.我正在使用NOTXORPEN,所以我只能通过再次绘制来删除该行. 在里面: ScreenDC := GetDcEx(GetDesktopWindow,DCX_LOCKWINDOWUPDAT
I.m使用此代码在所有窗口的顶部用鼠标绘制一条线.我正在使用鼠标钩来获取鼠标坐标,并且在鼠标右键按下时每次鼠标移动我正在画线.我正在使用NOTXORPEN,所以我只能通过再次绘制来删除该行.

在里面:

ScreenDC := GetDcEx(GetDesktopWindow,DCX_LOCKWINDOWUPDATE);

PenHandle := CreatePen(PS_SOLID,HitStorage.GetPenWidth,10);

SelectObject(ScreenDC,PenHandle);
OldPenMode := SetRop2(ScreenDC,R2_NOTXORPEN);  // Setting the PenMode to NotXor

MoveToEx(ScreenDC,X,Y,Nil); //Move The Pen Position to the Cursor Position

我在每个鼠标移动中使用此代码:

LineTo(ScreenDC,Y); // Draw a Line between the prev Point to Current Point

此代码适用于Windows 95,98,2000和XP,但现在使用Windows 7非常慢.

我在Delphi 3中使用ONLY Windows API编写了一个鼠标手势程序(1999年编写)(由于版本3中的Delphi BUG,鼠标钩子是用VC编写的).这个程序正在完成StrokeIt正在做的事情,但不知何故,StrokeIt设法找出了解决这个问题的方法.

我的代码在Delphi中,但我们将非常感谢您使用任何语言的答案!

我将更详细地解释我正在尝试构建的内容.我的申请分为三个部分:

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

我无法让Part1在Windows7(Vista)上工作,正如Martyn在他的回答中所写,我想我必须改变概念.现在我通过钩住鼠标消息和上面附带的代码绘制手势来进行跟踪…我理解了分层窗口的基础但是什么对我有用?你认为制作一个全屏最顶层的透明窗口并使用它可以完成这项工作吗?有人可以帮我写这个代码吗?

解决方法

在Windows Vista之前,桌面被绘制为实际的GDI表面,因此这种活动有效 – 尽管它的工作速度取决于你的GDI驱动程序的加速度.

使用Vista以及桌面窗口管理器使用DX将多个窗口(其中一些可能使用GDI,其中一些可能不使用)组合到一个最终场景中,该场景将呈现给较新的驱动程序模型.结果直接戳到屏幕像素会慢很多.

更根本的是,这不是完成任务的方法.我不太清楚你要构建什么,但你可能想了解Layered Windows:http://msdn.microsoft.com/en-us/library/ms997507.aspx,它提供了一种支持和适当的方式来在实际应用程序之上创建更复杂的场景.他们还应该帮助你避免使用鼠标钩,这也是一个坏主意.

马丁

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读