VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 2561|回复: 0

[推荐] vbRC5BaseDlls 的具体用法 简单写了个例子大家看看效果

[复制链接]
发表于 2016-5-10 21:07:17 | 显示全部楼层 |阅读模式
关于这个库的使用简单看了下 做了个例子大家看看 使用有多简单, 这个类是参照网站例子里的代码写的,因为不清楚这东西的合适用法,所以从不同例子里摘出了我认为合适的部分 组合成现在这个框架。这东西只是个演示,让你看看这玩意怎么用,其用意是希望用的人多一些。

演示的效果很棒,可以看到代码很少,但运行后,你可以在面板里移动鼠标,看到随机线条的快速绘制,你也许不必担心对你原来的程序有什么影响,因为所有改变都局限在这个类里面,你可以在类里面用新的方法复现你原来代码中的部分,而不会担心影响到原来代码的运行。

这个类有2个接口

Public Sub FrmPanel(x1 As Single, y1 As Single, Width As Single, Height As Single, fHwnd As Long)
    Set Panel = Cairo.WidgetForms.CreateChild(fHwnd)
        Panel.Move x1, y1, Width, Height
End Sub

Public Sub MovePanel(x1 As Single, y1 As Single, Width As Single, Height As Single)
     Panel.Move x1, y1, Width, Height
End Sub

一个是在 Form_Load里 如
       类名.FrmPanel  0,0,100,100,Me.Hwnd
      作用是在这个类里建立一个面板,这个面板将会覆盖窗口上你设置的面积。想想是不是很有用,比如窗口上可以用不同面板分成绘制区,按钮区等等,另外支持滚轮,省的另找

一个是放在窗口大小改变里
       类名.MovePanel 0,0,100,100
      作用窗口大小改变,自然绘图区也要重定义不是

最后一个是执行
      ReDrawUsing()
      你可以在里面写上你想绘制的任何东西,窗口,控件,动画。。。。。

貌似就这样了。。。下面简单写了个东西 作用是当鼠标在面板区上移动时,随机在 “”面板“ ”上绘制出100根2头带圆点的反锯齿线,
请将代码拷贝下来 放进你自己建立的一个类中。另外这个库几乎没有帮助文档什么,怎么用也是靠猜的。有什么新的应用例子也欢迎大家发上来交流。

'==============基于vbRC5BaseDlls,所以别忘了引用===============
Private New_C As New cConstructor
'背景缓存
Private UsingBacks As cCairoSurface
'绘制对象
Private Dr As cCairoContext
'一个独立板面
Private WithEvents Panel As cWidgetForm
'输出事件
Public Event PanelClick(Name As String)
'============================================================

Public Function ReDrawUsing() As cCairoSurface
    Dim I&, Back As cCairoContext
  
    If UsingBacks Is Nothing Then
        Set UsingBacks = Cairo.CreateSurface(Panel.Width, Panel.Height)
        Set Back = UsingBacks.CreateContext
        
       'the following two lines ensure a complete Surface-Fill
        Back.SetSourceColor 0
        Back.Paint
      
       '在这里绘制其他需要缓冲的种种其他元素
       '
       '.Draw BackCC
       '
    End If
  
    Set Dr = Cairo.CreateSurface(Panel.Width, Panel.Height, ImageSurface).CreateContext
   
   '在这里,可以把缓冲区内容快速贴入绘制区
    Dr.RenderSurfaceContent UsingBacks, 0, 0
   
    '下面这里要做你的全部绘制工作
    Dr.TranslateDrawings 0, 0   '设置开始绘制区域
    '设置线颜色,透明反锯齿等内容
    Dr.SetSourceColor vbGreen, 0.5, 1
    '设置线头帽子
    Dr.SetLineCap CAIRO_LINE_CAP_ROUND
    '设置线宽
    Dr.SetLineWidth 1
   
    '将设置好的绘制对象送进下面绘制过程中
    DrawLineOn Dr
  
   '这里可以将绘制好的图片随该函数结束返回
    Set ReDrawUsing = Dr.Surface
End Function

Private Sub DrawLineOn(Dr As cCairoContext)
    Dim x1 As Integer, y1 As Integer, x2 As Integer, y2 As Integer, I As Integer
  
    For I = 1 To 100
        x1 = NextNumber(Panel.Width)
        y1 = NextNumber(Panel.Height)
        x2 = NextNumber(Panel.Width)
        y2 = NextNumber(Panel.Height)
        
        Dr.SetSourceColor vbRed, 0.8
        Dr.Drawline x1, y1, x2, y2  'again, also this is only a Path
        Dr.Stroke
        
        Dr.SetSourceColor vbGreen, 0.8
        Dr.ARC x1, y1, 3
        Dr.Fill
        Dr.ARC x2, y2, 3
        Dr.Fill
    Next
  
    Dr.Stroke
End Sub

Private Sub Panel_MouseMove(Button As Integer, Shift As Integer, x As Single, y As Single)
    Cairo.ImageList.AddSurface "Plot", ReDrawUsing
    ’显示到面板上
    Panel.WidgetRoot.ImageKey = "Plot"
End Sub

Private Sub Panel_Resize()
    Set UsingBacks = Nothing
End Sub

Private Sub Class_Terminate()
    New_C.CleanupRichClientDll
End Sub

Public Sub FrmPanel(x1 As Single, y1 As Single, Width As Single, Height As Single, fHwnd As Long)
    Set Panel = Cairo.WidgetForms.CreateChild(fHwnd)
        Panel.Move x1, y1, Width, Height
End Sub

Public Sub MovePanel(x1 As Single, y1 As Single, Width As Single, Height As Single)
     Panel.Move x1, y1, Width, Height
End Sub

'随机数生成
Private Function NextNumber(Optional ByVal ceiling As Integer = 0) As Integer
    Randomize (Timer)
    NextNumber = Int(Rnd() * (CDbl(ceiling) + 1)) '生成 0 - ceiling 之间的随机数
End Function

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

点评

Cairo是GTK的绘图库……一般在Linux下面用  发表于 2016-5-18 19:14
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-6-29 20:45

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表