Doble bufer URGENTE

lorddrako
30 de Noviembre del 2003
Caballeros si alguien sabe como se usa el doble bufer en visual para generar animaciones fluidas por fa aviseme. gracias

Ab?o - PORTUGAL
30 de Noviembre del 2003
Não precisa agradecer ! ... Muito obrigado pela atenção ! ...

Abilio Rodrigues (AVEIRO - POR
30 de Noviembre del 2003
Depende do trabalho que pretendas levar a cabo. Em traços gerais, criar um Double Buffer, Back Buffer ou Of Screen, é tudo a mesma coisa.

'Declara estas funções API num módulo

Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
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

'Aqui vai um exemplo de como se fáz

'Coloca isto num evento qualquer. Onde fizer falta.

'Inicio do Double buffering
Dim aDC As Long
Dim BackBuffDC, BackBuffBMP As Long
Dim gRect As RECT
GetClientRect Picture1.hwnd, gRect
aDC = Picture1.hdc
' Double buffering ...
BackBuffDC = CreateCompatibleDC(aDC)
BackBuffBMP = CreateCompatibleBitmap(aDC, gRect.Right, gRect.Bottom)
DeleteObject SelectObject(BackBuffDC, BackBuffBMP)
'Aqui deves efectuar as alterações que pretendes no Back Buffer (em memória)
With BackBuffDC
'Utiliza funções API como DrawText, BitBlt ou tantas outras que
'se poderão ajustar ao que necessitas
'
'
'Desta forma, terás tudo o que pretendes, realizado a extrema velocidade
'porque tudo é feito num buffer em memória que é muito mais rápido
End With
With gRect
'Agora, de uma só vez, envias tudo o que foi feito em memória, para
'o Picture1.hDc
'O efeito é instantâneo e extremamente profissional
BitBlt aDC, .Left, .Top, .Right - .Left, .Bottom - .Top, BackBuffDC, .Left, .Top, vbSrcCopy
End With
'Não esquecer de apagar os objectos depois de não fazerem falta
DeleteDC BackBuffDC
DeleteObject BackBuffBMP