Comportamiento extraño por el uso de wbrwline.c

Post Reply
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Comportamiento extraño por el uso de wbrwline.c

Post by tsales »

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
Toni Sales
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
tsales
Posts: 186
Joined: Sat Oct 08, 2005 7:32 am

Post by tsales »

Antonio 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.
Antonio
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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Toni,

Es como si se perdiesen mensajes de pintado, ya que si luego redimensionas la ventana ó la maximizas, se pinta correctamente.

Es un problema que comenzó con el pintado a doble buffer y que todavía no sabemos exactamente por qué ocurre.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply