Antonio
En algunas ocasiones he reportado el comportamiento extraño en el repintado de ventanas con color de fondo, cuando otra ventana es movida por encima. Creo haber localizado el problema pero se escapa a mis conocimientos el poderlo solucionar. Proviene del uso de la clase TWbrose de Hernan y concrétamente la línea:
#define _PutSym( _SymEval ) hb_vmPushSymbol( &hb_symEval )
en el fichero "WBRWLINE.C".
Y como muestra un boton:
http://hyperupload.com/download/a680c98 ... 1.JPG.html
En la imagen se aprecian los residuos.
El codigo fuente utilizado es el siguiente, enlazando al mismo tiempo el fichero en "c" al buildx.bat :
echo wbrwline.obj + >> b32.bc
-----------------------------------------------------------------
#include "FiveWin.ch"
static oWnd
function Main()
local oWndEdit, oBar, oIcon, oImage
local cName := "FiveWin power"
DEFINE ICON oIcon RESOURCE "test"
DEFINE WINDOW oWnd FROM 1, 1 TO 20, 70 TITLE "I am the MDI Frame" ;
COLOR "W+/R" ;
ICON oIcon
ACTIVATE WINDOW oWnd MAXIMIZED ;
VALID MsgYesNo( "Want to End ?" )
return nil
---------------------------------------------------------------------------
Saludos
Comportamiento extraño por el uso de wbrwline.c
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Toni,
En el ejemplo que proporcionas no estás usando el browse.
El problema proviene por una lentitud al procesar todos los mensajes de pintado que envia Windows, debido al uso del pintado a doble buffer.
Si en la Clase TWindow declaras los métodos DispBegin() y DispEnd() como VIRTUAL, entonces desaparecerá el problema, pero no tendrás pintado a doble buffer que elimina muchos parpadeos, pero tiene ese desagradable efecto, debido al tiempo que consume la maquina virtual de la aplicación.
En el ejemplo que proporcionas no estás usando el browse.
El problema proviene por una lentitud al procesar todos los mensajes de pintado que envia Windows, debido al uso del pintado a doble buffer.
Si en la Clase TWindow declaras los métodos DispBegin() y DispEnd() como VIRTUAL, entonces desaparecerá el problema, pero no tendrás pintado a doble buffer que elimina muchos parpadeos, pero tiene ese desagradable efecto, debido al tiempo que consume la maquina virtual de la aplicación.
AntonioAntonio Linares wrote:Toni,
En el ejemplo que proporcionas no estás usando el browse.
El problema proviene por una lentitud al procesar todos los mensajes de pintado que envia Windows, debido al uso del pintado a doble buffer.
Si en la Clase TWindow declaras los métodos DispBegin() y DispEnd() como VIRTUAL, entonces desaparecerá el problema, pero no tendrás pintado a doble buffer que elimina muchos parpadeos, pero tiene ese desagradable efecto, debido al tiempo que consume la maquina virtual de la aplicación.
El tema es que si comenta la linea que te indico y sin usar el browse el repintado se realiza correctamente. Yo le he probado en 2 equipos diferentes con tarjetas de video + o - rápidas y en _ el comportamiento es identico.
Con el problema del doble buffer se entendería un comporamiento lógico si tardando más, al final, lo repintara correctamente. Lo curioso es que cuando la ventana recibe el foco, esta se queda con los residuos hasta que se fuerza de alguna forma un repintado.
Saludos
Toni Sales
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: