Código: Selecionar todos
Function Main
private aBlocks:= {}
aAdd( aBlocks, {|| Wvt_DrawBoxRaised( 2, 1, 32, 78 ) } )
aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( 3, 31, 22, 77 ) } )
aAdd( aBlocks, {|| Wvt_DrawBoxRecessed( 3, 2, 5, 28 ) } )
aLastPaint := WvtSetBlocks( aBlocks )
inkey(0)
return
Como eu havia dito, você guarda tudo o que for gráfico, caixas, imagens, etc ... dentro de uma matriz (aBlocks)
Eu guardo toda a tela inicial do sistema, e as funções WvtSetBlocks e WvtPaint se encarregam do resto.
Um detalhe é que se precisar abrir outra janela por cima, os objetos gráficos estarão lá atrapalhando. Então nesse caso eu guardo o conteúdo da matriz em outra matriz, zero o seu conteúdo, e então eu posso abrir outras janelas e caixas por cima. Terminando eu restauro o conteúdo anterior e pronto, está tudo lá de novo. Pode minimizar, sobrepor programas, etc.
Código: Selecionar todos
FUNCTION Wvt_Paint()
LOCAL aBlocks := WvtSetBlocks()
aEval( aBlocks, {|e| eval( e ) } )
WvtPaintObjects()
RETURN 0
Código: Selecionar todos
FUNCTION WvtSetBlocks( a_ )
LOCAL o
STATIC s := {}
o := aclone( s )
IF a_ != nil
s := aclone( a_ )
ENDIF
RETURN o