📄 020203.htm
字号:
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>vb study</title><style>
<!--
td {font-size: 9pt}
A:link {text-decoration: none; color: #0033cc;font-size: 9pt}
A:visited {text-decoration: none; color: #0066CC;font-size: 9pt}
A:active {text-decoration: none; color: #ff0000; font-size: 9pt}
A:hover {text-decoration: underline; color: #000000;font-size: 9pt}
-->
</style>
</head>
<body>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="98%">
<tr>
<td width="100%"><a href="#">你的位置</a>:<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="#">VB学习</a>--<a href="#">ActiveX控件</a></td>
</tr>
<tr>
<td width="100%">
<p align="center"><font size="2">图形</font></td>
</tr>
<tr>
<td width="100%"><br>
<font size="2">paintpicture画图方法是一个极为重要的绘图方法,许多特技动画都是这样产生的,如旋转,滑入,隐现,弹出等等,它的最后一个参数是"位操作",也就是三元光栅的操作,常用的有vbSrcCopy(值为&HCC0020):源位图直接覆盖目标位图;vbSrcAnd(值为&H8800C6):源位图与目标位图进行"与"操作;vbSrcInvert(&H660046):源位图与目标位图进行异或操作。vbSrcPaint(&HEE0086):源位图与目标位图进行"或"操作。此外还有一些,到对象浏览器中去找。<br>
使用paintpicture方法的一个例子(一幅图片从对象右下角逐渐移入):<br>
Dim w As Integer<br>
Dim h As Integer<br>
Dim wscale As Integer<br>
Dim hscale As Integer<br>
<br>
Private Sub Form_Load()<br>
Picture1.Picture = LoadPicture("c:\我的文档\my webs\红楼梦2.bmp")<br>
w = Picture1.ScaleWidth<br>
h = Picture1.ScaleHeight<br>
wscale = w<br>
hscale = h<br>
Picture2.ScaleHeight = h<br>
Picture2.ScaleWidth = w<br>
Picture1.Visible = False<br>
End Sub<br>
<br>
Private Sub Timer1_Timer()<br>
w = w - 1<br>
h = h - 1<br>
If w < 0 Then<br>
w = 0<br>
Timer1.Enabled = False<br>
End If<br>
If h < 0 Then h = 0<br>
Picture2.PaintPicture Picture1.Picture, w, h, wscale - w, hscale - h, _<br>
0, 0, wscale - w, hscale - h, vbSrcCopy<br>
End Sub<br>
原始的动画方法:在一位置画一图,然后用背景色重画一遍将此图隐蔽,再在新位置画图,又用背景色画一遍隐去,如此反复,达到简单"动画",这是在DOS下的方法。<br>
如:Private Sub Timer2_Timer()<br>
Circle (m, n), 400, BackColor<br>
m = m + 10: n = n + 10<br>
Circle (m, n), 400, RGB(0, 0, 255)<br>
End Sub<br>
实用的动画方法:API函数的BitBlt函数, <br>
先要介绍一点知识:位操作。位操作是针对二进制数进行的,其每一位上只有1或0,两个二进制数之间就可进行位操作(就是按位逐位进行比较),用And,Or,Not,Xor等连接。具体规则如下:<br>
0 And 0=0;0 and 1=0;1 and 0=0;1 and 1=1 如:1011 and 1100=1000;1 and 10=0<br>
注:两个数位数不等时,从最低位对齐开始,高位数不足的以0填充,如10 and 10011实际可看成是00010 and 10011,结果为10,另外,在VB代码中使用的是十进制,直接写101意思是一百零一。不是二进制数。要注意。<br>
0 or 0=0;0 or 1=1;1 or 0 =1;1 or 1=1 如:10 or 1100=1110<br>
0 Xor 0=0;0 xor 1=1;1 xor 0=1;1 xor 1=0 如:101 xor 1100=1001<br>
not 1=0;not 0=1 如: not 1001=0110=110<br>
应用:在实际中,数字都是十进制的,如3 and 6等于多少呢?在VB中,它先转换为二进制数,为11 and 110=010=10,再转换还十进制数为2,VB中就会输出结果2了。<br>
[问题:如何在VB中转换一个数成二进制数,好直接运算?我只知道十六进制=Hex(十进制),八进制=Oct(十进制)。可就没查到二进制的。咳,就建个函数吧。如下:] <br>
Function lxntwo(ByVal x As Integer) As String<br>
Static z As String<br>
Do<br>
y = x Mod 2<br>
x = x \ 2<br>
z = z & CStr(y)<br>
Loop While x > 1<br>
lxntwo = CStr(x) & StrReverse(z)<br>
z = ""<br>
End Function<br>
重要的图形动画函数:API中的BitBlt函数。其声明如下:<br>
Private Declare Function BitBlt Lib "gdi32" _<br>
(ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _<br>
ByVal nWidth As Long, ByVal nHeight As Long, _<br>
ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _<br>
ByVal dwRop As Long) As Long<br>
调用如:<br>
a = BitBlt(Picture2.hDC, 0, 0, Picture3.ScaleWidth, _<br>
Picture3.ScaleHeight, Picture3.hDC, 0, 0, vbSrcPaint) <br>
该函数在两个对象设备间复制位图或进行光栅操作(即象素点色值间的位操作)很有用。别看这么长,其实参数简单:<br>
hDestDC:目标绘图对象设备句柄。如:picture2.hDC.得到picture2"设备句柄"。<br>
x,y;nWidth,nHeight:目标对象中用来存放绘图结果的起始坐标位置(x,y)和大小(宽nWidth ,高nHeight).<br>
hSrcDC:源图形对象设备句柄。 <br>
xSrc,ySrc:源对象中剪贴图形开始的坐标(以该点为左上角坐标向目标对象提供图形源)。<br>
dwRop:指定一种光栅操作(共有256种)。如&HCC0020覆盖;&H8800C6逻辑与等等。光栅操作?即混合象素间位操作,这样理解:设有个picture对象,其中坐标(100,100)处有一点色为RGB(255,0,0),而现在要在此picture上再画一图(含此点范围),设新画到(100,100)坐标上点色为(110,110,110),这时,就要指定这两个"混合象素"--1个是RGB(255,0,0),1个是RGB(110,110,110)的位操作了:如全部进行或操作:255 or 110=255,110 or 0=110,110 or 0=110,那么实际在此点的最后颜色是RGB(255,110,110)。</font>
<p align="center">
<br>
< <a href="020202.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="020301.htm">下一页</a>
><br>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -