mfc如何删除lineto画的_[按键精灵手机版教程]纯API,教你画射击游戏的准心

857ad12782bfdbd78bae9f6f37c1897a.gif

金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot,Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想制作脚本和学习按键精灵的朋友可以添加按键精灵学习交流群:554127455 学习路上不再孤单,金猪脚本伴你一同成长.

0af2db5fbb044db33f0073021cc61776.png

有的时候,玩枪击游戏,不想一直使用脚本。想偶尔手动,但是又因为没有准心时常打不准,锵锵锵~那为什么不自己画一个准心呢?我们一起来学习下这个准心要如何画吧~

d738a7e17996797172ff769a881255ab.gif

首先,我们先来简单了解下,要用到的几个Api函数,吼吼~欢迎表格君上场~


SetROP2声明Declare Function SetROP2 Lib "gdi32" Alias "SetROP2" (ByVal hdc As Long, ByVal nDrawMode As Long) As Long功能主要用于设定当前前景色的混合模式。R2_NOT就是取反的意思,即前景色为背景色的反色,经常用R2_NOT来画橡皮线,因为两次取反可以还原背景色。参数1.设备场景的句柄 2.设备场景的新绘图模式返回值如执行成功,返回前一个绘图模式;零表示出错

GetWindowDC声明Declare Function GetWindowDC Lib "user32" Alias "GetWindowDC" (ByVal hwnd As Long) As Long功能获取整个窗口(包括边框、滚动条、标题栏、菜单等)的设备场景参数窗口句柄返回值设备句柄

CreatePen声明Declare Function CreatePen Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long功能用指定的样式、宽度和颜色创建一个画笔参数画笔类型返回值如函数执行成功,就返回指向新画笔的一个句柄;否则返回零

SelectObject声明Declare Function SelectObject Lib "gdi32" Alias "SelectObject" (ByVal hdc As Long, ByVal hObject As Long) As Long功能每个设备场景都可能有选入其中的图形对象。其中包括位图、刷子、字体、画笔以及区域等等。一次选入设备场景的只能有一个对象。选定的对象会在设备场景的绘图操作中使用。例如,当前选定的画笔决定了在设备场景中描绘的线段颜色及样式参数1.一个设备场景的句柄 2.一个画笔、位图、刷子、字体或区域的句柄返回值与以前选入设备场景的相同hObject类型的一个对象的句柄,零表示出错。如选定的对象是一个区域(Region),结果就是下列常数之一:SIMPLEREGION, COMPLEXREGION 或 NULLREGION 对区域进行描述, GDI_ERROR 表示出错

MoveToEx声明Declare Function MoveToEx Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long功能为指定的设备场景指定一个新的当前画笔位置。前一个位置保存在lpPoint中参数1.指向一个设备场景的句柄 2.采用逻辑坐标表示的新画笔位置 3.前一个画笔位置返回值非零表示成功,零表示失败

LineTo声明Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long功能用当前画笔画一条线,从当前位置连到一个指定的点。这个函数调用完毕,当前位置变成x,y点参数1设备场景的句柄 2.线段终点位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部分返回值非零表示成功,零表示失败

DeleteObject声明Declare Function DeleteObject Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long功能用这个函数删除GDI对象,比如画笔、刷子、字体、位图、区域以及调色板等等。对象使用的所有系统资源都会被释放参数一个GDI对象的句柄返回值非零表示成功,零表示失败

我们拿桌面窗口做例子,在桌面窗口上画一个准心,准心随着鼠标移动而移动。

脚本大致过程:

1、获取当前鼠标坐标,以鼠标坐标作为画笔位置

2、取设备句柄,这里设置取屏幕设备句柄

3、创建一个画笔对象

4、将创建的画笔对象载入到设备场景里(当前屏幕即是设备场景)。

5、清屏一次,消除之前画笔对象画的准心

6、指定好画笔开始的位置,(设置鼠标所在的坐标)

7、 以鼠标坐标为中心,画一条横线。以鼠标坐标为中心,画一条竖线

8、加入Do……Loop 循环,画一个准心删除一个准心,这样就实现了准心跟随鼠标移动而移动

代码:

  1. Declare Function 取设备句柄 Lib "user32" Alias "GetWindowDC" (ByVal hwnd As Long) As Long
  2. Declare Function 创建画笔对象 Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  3. Declare Function 选入场景 Lib "gdi32.dll" Alias "SelectObject" (ByVal hwnd As Long,ByVal hwnd As Long) As Long
  4. Declare Function 指定画笔位置 Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal x As Long) As Long
  5. Declare Function 画直线 Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  6. Declare Function 删除对象 Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
  7. //取设备句柄(窗口句柄)[返回设备句柄,整数型]
  8. //创建画笔对象(类型,宽度,颜色)[返回对象句柄]
  9. //选人场景(设备句柄,场景句柄)
  10. //指定画笔位置(设备句柄,X,Y,坐标结购)
  11. //画直线(设备句柄,终点X,终点Y)
  12. //删除对象(对象句柄)
  13. Do
  14. GetCursorPos x, y
  15. 设备句柄 =取设备句柄(0)//窗口句柄为0时,取屏幕设备句柄,如在指定窗口画就填写窗口句柄
  16. 对象句柄 = 创建画笔对象(1, 2, 255)//参数1为类型,参数2为线条粗细,参数3为10进制的颜色值(255是红色)
  17. TracePrint 设备句柄
  18. TracePrint 对象句柄
  19. TracePrint 选入场景(设备句柄, 对象句柄)//此操作相当于windows画图时鼠标选择了画笔按钮。
  20. Call Plugin.Msg.HideScrTXT()
  21. TracePrint 指定画笔位置(设备句柄,x-50,y,坐标结构)//坐标结构不要使用,按键不支持此数据类型
  22. TracePrint 画直线(设备句柄, x + 50, y )//画横线
  23. TracePrint 指定画笔位置(设备句柄,x,y-50,坐标结构)//坐标结构不要使用,按键不支持此数据类型
  24. TracePrint 画直线(设备句柄, x, y + 50)//画竖线
  25. loop
  26. TracePrint 删除对象(对象句柄)'画完以后记得释放对象

复制代码


另一种方法,通过 SetROP2 函数实现。


前一种方法,是使用屏幕刷新 [backcolor=rgb(247, 247, 247)]Call Plugin.Msg.HideScrTXT() 用屏幕刷新来实现,画完一个准心刷新一次屏幕,把前面的画的准心清除掉。 SetROP2 函数是使用反色来覆盖掉前一次画的准心。

脚本大致思路:

1、画准心前,先取屏幕背景色的反色作为画笔的颜色,并且记录好当前鼠标坐标。

2、画一个准心

3、画完之后,再次取反色,第一次获取屏幕背景色的反色,然后第二次再取反色,那这次取到的就是屏幕的背景色了。然后利用原来记录好的鼠标坐标,画一个准心,相当于把之前画的准心用屏幕背景色再画一次进行覆盖。

4、循环画准心,达到鼠标移动,准心跟着移动的效果。

代码:

  1. Declare Function 反色 Lib "gdi32" Alias "SetROP2" (ByVal hdc As Long, ByVal nDrawMode As Long) As Long
  2. Declare Function 取设备句柄 Lib "user32" Alias "GetWindowDC" (ByVal hwnd As Long) As Long
  3. Declare Function 创建画笔对象 Lib "gdi32" Alias "CreatePen" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
  4. Declare Function 选入场景 Lib "gdi32.dll" Alias "SelectObject" (ByVal hwnd As Long,ByVal hwnd As Long) As Long
  5. Declare Function 指定画笔位置 Lib "gdi32" Alias "MoveToEx" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal x As Long) As Long
  6. Declare Function 画直线 Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
  7. Declare Function 删除对象 Lib "gdi32" Alias "DeleteObject" (ByVal hObject As Long) As Long
  8. //反色 (设备句柄,绘图模式)
  9. //取设备句柄(窗口句柄)[返回设备句柄,整数型]
  10. //创建画笔对象(类型,宽度,颜色)[返回对象句柄]
  11. //选人场景(设备句柄,场景句柄)
  12. //指定画笔位置(设备句柄,X,Y,坐标结购)
  13. //画直线(设备句柄,终点X,终点Y)
  14. //删除对象(对象句柄)
  15. // x1,y1 绘制坐标 x2,y2 上次绘制坐标
  16. Dim x1, x2, y1, y2
  17. 设备句柄 =取设备句柄(0)//取桌面窗口设备句柄,如在指定窗口画就填写窗口句柄
  18. 对象句柄 = 创建画笔对象(1, 2, 0)//参数1为类型,参数2为线条粗细,参数3为10进制的颜色值(这里用到了反色api准心是背景反色就不设置颜色了)
  19. TracePrint 设备句柄
  20. TracePrint 对象句柄
  21. TracePrint 选入场景(设备句柄, 对象句柄)//此操作相当于windows画图时鼠标选择了画笔按钮。
  22. Do
  23. 反色 设备句柄, 6 //R2_NOT 绘图模式的值是6
  24. TracePrint 指定画笔位置(设备句柄, x2 - 50, y2, 坐标结构)//坐标结构不要使用,按键不支持此数据类型
  25. TracePrint 画直线(设备句柄, x2 + 50, y2 )//画横线
  26. TracePrint 指定画笔位置(设备句柄, x2, y2 - 50, 坐标结构)//坐标结构不要使用,按键不支持此数据类型
  27. TracePrint 画直线(设备句柄, x2, y2 + 50)//画竖线
  28. GetCursorPos x1, y1
  29. 反色 设备句柄,6
  30. TracePrint 指定画笔位置(设备句柄, x1 - 50, y1, 坐标结构)//坐标结构不要使用,按键不支持此数据类型
  31. TracePrint 画直线(设备句柄, x1 + 50, y1 )//画横线
  32. TracePrint 指定画笔位置(设备句柄, x1, y1 - 50, 坐标结构)//坐标结构不要使用,按键不支持此数据类型
  33. TracePrint 画直线(设备句柄, x1, y1 + 50)//画竖线
  34. x2 = x1
  35. y2 = y1
  36. loop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值