已经用了bitblt和picturebox来做,但是速度太慢,cpu占用100%,p4 2.4。用文本框抖动太厉害。
请问有没有更好的方法,或者可以使bitblt的速度加快。

解决方案 »

  1.   

    CPU占用100%?!你可能每次BitBlt之后都没有DeleteObject(),而下次又重新CreateBitmap,这样的话系统资源不一会就会耗尽。BitBlt应该是API里最快的了。
      

  2.   

    是算法或者代码的问题吧?
    程序启动时创建一个离屏缓冲位图,然后每次要刷新时就更新那个位图,再bitblt
    然后你还可以用 ScrollWindowEx 把已经在屏幕上的内容往上移,这样只用重画窗口底部的内容就可以了。
      

  3.   

    我的很简单,label+frame+timer
    label显示文本,frame是label的容器,timer触发修改frame的top,搞定,无闪烁
      

  4.   

    用label和picturebox加上timer试一下Private Sub Form_Load()
    Timer1.Interval = 100
    End SubPrivate Sub Timer1_Timer()
    With Label1
    If .Left < 0 - .Width Then
        .Left = Picture1.Width
    Else
        .Left = .Left - 50
    End If
    End With
    End Sub
      

  5.   

    请注意,我要的是上滚,而且如果用label的话,我调入的文本比较多,那么就显示不完全了。
    以下是我的程序,请看看有什么问题。
    Private Sub Form_Load()
        Me.Show
        Dim intY As Integer, intX2 As Integer, intY2 As Integer
        'picBg.Picture = LoadPicture(App.Path & "\1.jpg")
        'intX2 = (Me.ScaleWidth - picBg.ScaleWidth) / 2
        intX2 = 10
    '    intY2 = (Me.ScaleHeight - picBg.ScaleHeight) / 2
        intY2 = 10
        Dim fsoTxt As New FileSystemObject, tsTxt As TextStream
        Do
            intY = picBg.ScaleHeight
            picBg.ForeColor = vbBlack
            picBg.Font.Size = 56
            picBg.Font.Bold = True
            Do
                picBg.CurrentY = intY
                intY = intY - 1
                Set tsTxt = fsoTxt.OpenTextFile(App.Path & "\1.txt")
                picBg.Print tsTxt.ReadAll
                If picBg.CurrentY < 0 Then Exit Do
                BitBlt Me.hDC, intX2, intY2, picBg.ScaleWidth, _
                    picBg.ScaleHeight, picBg.hDC, 0, 0, vbNotSrcCopy
                picBg.Cls
                DoEvents
                Dim lngK As Long
                For lngK = 0 To 0
                Next lngK
            Loop
        Loop
    End Sub
      

  6.   

    同意 onlineboy(stame) ~~~vb中有些api发生了变动,最好能不用就不用,要用api的话c是最好的选择啊`
      

  7.   

    我试了试 onlineboy(stame)的方法,很好用,感谢,不过因为滚动的速度很快,所以还是有闪烁,有没有办法让滚动的速度降下来?我用的是加循环的方法,不太好用。