| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> vb >> 图形 >> 文章正文
雨滴式的显示图片            【字体:
雨滴式的显示图片
作者:-    文章来源:-    点击数:    更新时间:2006-6-8

本范例是以一个stdPicture物件来存图形,之後於PictureBox中以特殊效果来显示。
因为我们想显示的只有一个图,所以不想多用另一个PictureBox来存原始图,而後
再画到另一个PictureBox上,那只有用StdPicture 物件来取代PictureBox(存来源图)
,但是BitBlt这个绘图函式需来源与目的的hDc,而StdPicture物件没有hDc,它只有
一个Handle值,以本例来说,这Handle值便是图形的hBitmap值。所以我们只好使用
MemoryDC的方式来做,产生一个MemoryDc後将BitMap图放於其上,之後便可以使用
BitBlt来绘图了。

'需求一个PictureBox( Named picture2),一个Command按键)
Option Explicit
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 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 DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Const SRCCOPY = &HCC0020
Private Picture1 As New StdPicture

Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim height5 As Long, width5 As Long
Dim hMemDc As Long

'stdPicture物件的度量单位是Himetric所以要转换成Pixel
height5 = ScaleY(Picture1.Height, vbHimetric, vbPixels)
If height5 > Picture2.ScaleHeight Then
   height5 = Picture2.ScaleHeight
End If
width5 = ScaleX(Picture1.Width, vbHimetric, vbPixels)
If width5 > Picture2.ScaleWidth Then
   width5 = Picture2.ScaleWidth
End If
'Create Memory DC
hMemDc = CreateCompatibleDC(Picture2.hdc)
'将Picture1的BitMap图指定给hMemDc
Call SelectObject(hMemDc, Picture1.Handle)
For i = height5 To 1 Step -1
    Call BitBlt(Picture2.hdc, 0, i, width5, 1, _
                hMemDc, 0, i, SRCCOPY)
    For j = i - 1 To 1 Step -1
        Call BitBlt(Picture2.hdc, 0, j, width5, 1, _
                hMemDc, 0, i, SRCCOPY)
    Next j
Next
Call DeleteDC(hMemDc)
End Sub

Private Sub Form_Load()
Dim i As Long
Picture2.ScaleMode = 3 '设定成Pixel的度量单位
'设定待Display的图
Set Picture1 = LoadPicture("c:\windows\素还真.bmp")
'                          ^^^^^^^^^^^^^^^^^^^^^^
'              Load the picture we want to show
End Sub
 

[1]

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 用VB编写DirectX7.0游戏(下…

  • 用VB编写DirectX7.0游戏(上…

  • 使用OLE DB和ADO调用返回记录…

  • 使用VB调用Oracle程序包内的…

  • VB中用ADO对象动态创建数据库…

  • fffff

  • 如何用MSComm Control传Bina…

  • MultiLink的WinSock Server程…

  • 用VB制作浏览器

  • 用VB编写网络寻呼机

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |