Partilhar via


Contextos de dispositivos de exibição privados

Um contexto de dispositivo privado permite que um aplicativo evite recuperar e inicializar um contexto de dispositivo de exibição cada vez que o aplicativo deve desenhar em uma janela. Os contextos de dispositivo privado são úteis para janelas que exigem muitas alterações nos valores dos atributos do contexto do dispositivo para prepará-lo para o desenho. Os contextos de dispositivos privados reduzem o tempo necessário para preparar o contexto do dispositivo e, portanto, o tempo necessário para realizar o desenho na janela.

Um aplicativo direciona o sistema para criar um contexto de dispositivo privado para uma janela, especificando o estilo CS_OWNDC na classe window. O sistema cria um contexto de dispositivo privado exclusivo cada vez que cria uma nova janela pertencente à classe. Inicialmente, o contexto do dispositivo privado tem os mesmos valores padrão para atributos que um contexto de dispositivo comum, mas o aplicativo pode modificá-los a qualquer momento. O sistema preserva as alterações no contexto do dispositivo durante a vida útil da janela ou até que o aplicativo faça alterações adicionais.

Um aplicativo pode recuperar um identificador para o contexto do dispositivo privado usando a função GetDC a qualquer momento após a janela ser criada. O aplicativo deve recuperar o identificador apenas uma vez. Depois disso, ele pode manter e usar a alça qualquer número de vezes. Como um contexto de dispositivo privado não faz parte do cache de contexto do dispositivo de exibição, um aplicativo nunca precisa liberar o contexto do dispositivo usando a funçãoReleaseDC.

O sistema ajusta automaticamente o contexto do dispositivo para refletir as alterações na janela, como mover ou dimensionar. Isso garante que todas as janelas sobrepostas sejam sempre cortadas corretamente; ou seja, nenhuma ação é exigida pelo aplicativo para garantir o clipping. No entanto, o sistema não revisa o contexto do dispositivo para incluir a região de atualização. Portanto, ao processar uma mensagem de WM_PAINT, o aplicativo deve incorporar a região de atualização chamando BeginPaint ou recuperando a região de atualização e cruzando-a com a região de recorte atual. Se o aplicativo não chamar BeginPaint , ele deverá validar explicitamente a região de atualização usando oValidateRect ou função ValidateRgn. Se o aplicativo não validar a região de atualização, a janela receberá uma série interminável de WM_PAINT mensagens.

Como BeginPaint oculta o cursor se uma janela estiver mostrando-o, um aplicativo que chama BeginPaint também deve chamar a função EndPaint para restaurar o cursor. EndPaint não tem outro efeito em um contexto de dispositivo privado.

Embora um contexto de dispositivo privado seja conveniente de usar, ele consome muita memória em termos de recursos do sistema, exigindo 800 ou mais bytes para armazenar. Os contextos de dispositivos privados são recomendados quando as considerações de desempenho superam os custos de armazenamento.

O sistema inclui o contexto do dispositivo privado ao enviar a mensagem WM_ERASEBKGND para o aplicativo. As seleções atuais do contexto do dispositivo privado, incluindo o modo de mapeamento, estão em vigor quando o aplicativo ou o sistema processa essas mensagens. Para evitar efeitos indesejáveis, o sistema usa coordenadas lógicas ao apagar o fundo; por exemplo, ele usa a função GetClipBox para recuperar as coordenadas lógicas da área a apagar e passa essas coordenadas para a funçãoFillRect. Os aplicativos que processam essas mensagens podem usar técnicas semelhantes.

Um aplicativo pode usar a função GetDCEx para forçar o sistema a retornar um contexto de dispositivo comum para a janela que tem um contexto de dispositivo privado. Isso é útil para realizar retoques rápidos em uma janela sem alterar os valores atuais dos atributos do contexto do dispositivo privado.