⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 020203.htm

📁 提供一个VB学习教程,入门级。来源于网上
💻 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(值为&amp;HCC0020):源位图直接覆盖目标位图;vbSrcAnd(值为&amp;H8800C6):源位图与目标位图进行"与"操作;vbSrcInvert(&amp;H660046):源位图与目标位图进行异或操作。vbSrcPaint(&amp;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 &lt; 0 Then<br> 
        w = 0<br> 
        Timer1.Enabled = False<br> 
        End If<br> 
        If h &lt; 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函数,&nbsp;<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(十进制)。可就没查到二进制的。咳,就建个函数吧。如下:]&nbsp;<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 &amp; CStr(y)<br> 
        Loop While x > 1<br> 
        lxntwo = CStr(x) &amp; 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)&nbsp;<br>
        该函数在两个对象设备间复制位图或进行光栅操作(即象素点色值间的位操作)很有用。别看这么长,其实参数简单:<br>
        hDestDC:目标绘图对象设备句柄。如:picture2.hDC.得到picture2"设备句柄"。<br>
        x,y;nWidth,nHeight:目标对象中用来存放绘图结果的起始坐标位置(x,y)和大小(宽nWidth ,高nHeight).<br> 
        hSrcDC:源图形对象设备句柄。&nbsp;<br>
        xSrc,ySrc:源对象中剪贴图形开始的坐标(以该点为左上角坐标向目标对象提供图形源)。<br>
        dwRop:指定一种光栅操作(共有256种)。如&amp;HCC0020覆盖;&amp;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>
        &lt; <a href="020202.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="020301.htm">下一页</a>    
        &gt;<br>
      </td>
    </tr>
  </table>
  </center>
</div>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -