Pergunta

Eu tenho uma janela Direct2D que pinta bem quando está em foco; No entanto, quando o foco se move para outra janela (o mesmo aplicativo ou outro), toda a janela fica preta. Eu prendi o problema ao uso de ID2D1HwndRenderTarget::Clear. Essa função é vital para minha aplicação, pois, sem ela, a pintura se torna bastante ... estranha.

Existe uma maneira de uma maneira de pintar uma janela direta não focada (Nota: WM_PAINT está sendo chamado como de costume, como está Clear, BeginPaint, etc. tudo sem erro)

Desde já, obrigado.

Foi útil?

Solução

Com minha experiência com o DirectX, se a tela voltar, porque o DX perdeu o dispositivo para o qual estava 'pintando'. Isso acontece muito - por exemplo - ao alternar entre uma janela DirectX de tela cheia para outro aplicativo e vice -versa.

Portanto, o que você precisa fazer é reintializar o dispositivo DX para que ele possa retomar as operações de pintura.

Isso pode ajudar um pouco mais (não o meu site, mas uma rápida pesquisa no Google aumentou)

http://www.programmersheaven.com/2/faq-directx-avoid-task-switching

Outras dicas

De msdn,

Handling Device Loss

Enquanto seu programa está em execução, o dispositivo gráfico que você está usando pode ficar indisponível. Por exemplo, o dispositivo pode ser perdido se a resolução de exibição for alterada ou se o usuário remover o adaptador de exibição. Se o dispositivo for perdido, o alvo de renderização também se tornará inválido, juntamente com quaisquer recursos dependentes do dispositivo associados ao dispositivo. Direct2D sinaliza um dispositivo perdido retornando o código de erro D2DERR_RECREATE_TARGET do método ENDDRAW. Se você receber esse código de erro, deverá recriar o destino de renderização e todos os recursos dependentes do dispositivo.

Por favor, verifique o link para obter mais informações. http://msdn.microsoft.com/en-us/library/ff684174(vs.85).aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top