• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Nazgulled

Override ao Form OnPaint produz bastante flickering preto (solução VS08 anexada)

3 mensagens neste tópico

Hi,

Estou a tentar criar uma aplicação com skins (apenas mudando o border e a caption) de uma forma diferente do que a que seria habitual (processar as mensagens do Windows e pintar no WM_NCPAINT) mas estou a ter bastantes problemas quando redimensiono o form.

A melhor forma de explicar este problema é com um vídeo, por isso, vejam o seguinte:

http://www.screencast.com/t/AIqK9Szmz

Aqui têm uma solução completa do VS2008 onde podem testar por vocês mesmos este problema e com todo o código que estou a usar:

http://stuff.nazgulled.net/misc/TestForm.zip

Alguém tem ideia de como solucionar este problema?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tiver a ver o teu códgio, e a tentar modificá-lo para que desenhasse o quadrado branco (de fundo) primeiro...

O que tirei é que quando fazes resize da janela, ele executa o OnResize(etc).

Nesse OnResize, ele primeiro redesenha os controlos da form, tudo, e no fim, faz o OnPaintBackground...

Provávelmente, vais ter de fazer um override ao OnResize, e talvez ao OnResizeBegin e OnResizeEnd... boa sorte :P Já que parece ser mais dificel que o OnPaintBackground.

O grande problema é que o Windows comporta-se assim mesmo quando fazes resize de uma janela sem borders, como a tua...

Se fores a ver, por exemplo, o WLM, que usa de certeza uma técnica como a tua (experimenta maximizar), vais ver que ele move a janela, para a direcção que estás a redimensionar, cria uma janela invizivel, e quando esta estiver desenhada, apaga a anterior e mostra a nova...

Não tenho capacidade para isso, mas talvez consigas :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema não está no resize, o problema está no double buffering que não está funcionar como deve ser... Já me sugeriram algumas técnicas que irei tentar implementar no futuro...

E isso do WLM é mentira (no meu não acontece o que dizes), isso deve ser porque tens os efeitos do Windows desactivados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora