Jump to content

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


Guest id194
 Share

Recommended Posts

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?

Link to comment
Share on other 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 😛 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 😄

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.