VB API 定义坐标 将坐标单位变成像素
Option Explicit
Dim K As Double
Dim lngX As Long 'X的值
Dim dblY As Double 'Y的值
Dim L As Long '绘图区域的宽
Dim H As Long '绘图区域的高
Dim lngMemoryDC As Long '内存中绘图的设备场景的句柄
Dim lngBMPHandle As Long '位图的句柄
Dim lngBrushHandle As Long '填充刷子的句柄
Dim hRgn As Long '填充区域的句柄
Private Const PI = 3.1415926 'PI
Private Const DC_L = 500 '内存设备场景对图片设备场景的倍数,注意,这个数据太大会导致函数执行失败
Private Const SRCCOPY = &HCC0020
Private Const SRCAND = &H8800C6
Private Const SRCDECIMALBIND = 19
Private Const SRCERASE = &H440328
Private Type POINTAPI
x As Long
y As Long
End Type
Private Declare Function PolyBezier Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cPoints As Long) As Long
Private Declare Function PolyBezierTo Lib "gdi32.dll" (ByVal hdc As Long, lppt As POINTAPI, ByVal cCount As Long) As Long
Private Declare Function PolyPolygon Lib "gdi32.dll" (ByVal hdc As Long, lpPoint As POINTAPI, lpPolyCounts As Long, ByVal nCount As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As Any) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) As Long
Private Sub Command1_Click()
Dim lngP As Long
If Command1.Caption = "开始" Then
Timer1.Enabled = True
Command1.Caption = "停止"
Else
Timer1.Enabled = False
Command1.Caption = "开始"
End If
End Sub
Private Sub Form_Load()
Dim intP As Integer
Dim x As Double
Dim y As Double
Dim lngP As Long
On Error GoTo errSub
L = Picture1.ScaleWidth / 15
H = Picture1.ScaleHeight / 15
K = 4 * PI / L
dblY = H * 0.5
lngMemoryDC = CreateCompatibleDC(Picture1.hdc) '创建一个与窗体相兼容的设备场景
lngBMPHandle = CreateCompatibleBitmap(lngMemoryDC, DC_L * L, H) '在内存中创建与窗体同样大小的位图
SelectObject lngMemoryDC, lngBMPHandle '将位图选入刚才创建的设备场景中
lngBrushHandle = CreateSolidBrush(RGB(255, 255, 255)) '用白色创建一个实色画刷
hRgn = CreateRectRgn(0, H, DC_L * L, 0) '创建一个与窗体同样大小的矩形区域
lngP = FillRgn(lngMemoryDC, hRgn, lngBrushHandle) '用创建的画刷对该区域进行填充
Exit Sub
errSub:
MsgBox Err.Description
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
DeleteObject hRgn '删除以前创建的对像用于释放内存
DeleteObject lngBrushHandle
DeleteObject lngBMPHandle
DeleteDC lngMemoryDC
End Sub
Private Sub Timer1_Timer()
Dim lngP As Long
Dim lngT As Long
Dim lngK As Long
Dim intP As Integer
On Error GoTo errSub
lngK = GetTickCount
MoveToEx lngMemoryDC, lngX, dblY, ByVal 0&
lngX = lngX + 1
dblY = (0.45 * H * Sin(K * lngX) + 0.5 * H)
lngP = LineTo(lngMemoryDC, lngX, dblY)
If lngX <= L Then
lngP = BitBlt(Picture1.hdc, 0, 0, L, H, lngMemoryDC, 0, 0, SRCCOPY) '将内存位图中的图形拷贝到窗体上显示
Else
lngP = BitBlt(Picture1.hdc, 0, 0, L, H, lngMemoryDC, lngX - L, 0, SRCCOPY) '将内存位图中的图形拷贝到窗体上显示
End If
Exit Sub
errSub:
End Sub
相关推荐
屏幕取像素值VB
总的来说,通过VB调用`GetPixel` API,我们可以轻松地获取屏幕上的像素颜色,并将其转换为RGB值进行处理。
VB窗体自定义:使用MOVE指令控制窗口尺寸与位置
在Visual Basic(VB)编程中,Move方法是一个非常实用的工具,用于在运行时动态地重新定位和调整控件或窗体的大小。它提供了一个简单直接的方式,让开发者能够控制窗体或控件在屏幕上的具体位置,以及它们的尺寸。通过使用Move方法,你可以不必依赖复杂的API调用或外部库,就可以实现界面元素的精确布局。在本章中,我们将对Move方法进行初步介绍,探讨其定义、基本语法以及它如何在VB程序中发挥作用,为后续章节对Move方法更深层次的探讨打下基础。
基于VB6的本地文件搜索工具完整项目实战
也许你会说:“都什么年代了还搞 VB6?” 但现实是,全球仍有数以万计的关键业务系统运行在 VB6 上。它们稳定、高效、无需升级即可继续服役。更重要的是,VB6 教会我们的那些东西——事件驱动编程、资源管理意识、性能优化思维、用户体验设计原则——至今依然适用。哪怕你现在写的是 Python、JavaScript 或 Rust,当你面对一个复杂的 I/O 密集型任务时,不妨想想那个年代的程序员是怎么用有限的工具做出无限可能的。毕竟,真正的高手,从来都不是被工具定义的。🧠💡。
基于VB6.0的Print显示排版应用开发实战
不要从(0,0)开始打印!考虑页边距:还可以封装一个“坐标栈”机制,类似 push/pop:X As LongY As LongEnd TypeEnd WithEnd SubEnd WithEnd Sub嵌套表格、浮动元素再也不怕回不去了 😎。虽然 VB6 没有内置控件,但可通过 API 调用实现:' ...其他字段省略End Type调用后即可获取用户设置的边距、纸张方向等,并同步到Printer对象。
VB屏幕像素获取
以下是一些关于如何在VB中实现屏幕像素获取的知识点:1. **API函数的使用**: VB本身并没有内置获取屏幕像素颜色的函数,但可以通过调用Windows API(应用程序接口)函数来实现。


API
