Retornando modos de exibição: DrvGetModes
O driver de exibição também deve dar suporte a DrvGetModes. Essa função fornece à GDI um ponteiro para uma matriz de estruturas DEVMODEW . As estruturas definem os atributos da exibição para os vários modos compatíveis, incluindo a dimensão (em pixels e milímetros), número de planos, bits por plano, informações de cor e assim por diante.
A ordem na qual um driver grava os modos de exibição disponíveis na memória quando a função DrvGetModes é chamada pode afetar o modo de exibição final escolhido pelo Windows. Em geral, se um aplicativo não especificar um modo padrão, o sistema selecionará o primeiro modo de correspondência na lista fornecida pelo driver.
Por exemplo, suponha que o modo de exibição atual seja
800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER
e o driver especifica a lista de modos de exibição disponíveis da seguinte maneira:
Mode | Detalhes do modo |
---|---|
A | 600x800x32bpp@60Hz DMDO_270 DMDFO_STRETCH |
B | 600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH |
C | 600x800x32bpp@60Hz DMDO_90 DMDFO_CENTER |
D | 600x800x32bpp@60Hz DMDO_270 DMDFO_CENTER |
Caso 1
Se um aplicativo tentar definir o monitor como 600x800x32bpp@60Hz, mas os sinalizadores DM_DISPLAYORIENTATION e DM_DISPLAYFIXEDOUTPUT não forem definidos no membro dmFields de DEVMODEW, o sistema deverá escolher a orientação e os modos de saída fixos. Nesse caso, o sistema escolherá o modo de exibição C porque é o primeiro modo listado que corresponde à configuração de DMDFO_CENTER atual.
Caso 2
Se o aplicativo tentar definir o monitor como 600x800x32bpp@60Hz DMDFO_STRETCH, o sistema escolherá o modo de exibição A.
Caso 3
Se o aplicativo tentar definir o monitor como 600x800x32bpp@60Hz DMDO_270, o sistema escolherá o modo de exibição D.
Caso 4
Se o aplicativo tentar definir o monitor como 600x800x32bpp@60Hz DMDO_DEFAULT, o sistema não encontrará uma correspondência aceitável.
Uma exceção se aplica a essas regras: quando o sistema busca uma correspondência para a orientação de exibição e a orientação não é especificada e o modo atual não pode ser correspondido, o sistema dará prioridade DMDO_DEFAULT sobre outras orientações de exibição.
Por exemplo, suponha que o modo de exibição atual seja
600x800x32bpp@60Hz DMDO_90 DMDFO_STRETCH
e o driver especifica a lista de modos de exibição disponíveis da seguinte maneira:
Mode | Detalhes do modo |
---|---|
A | 800x600x32bpp@60Hz DMDO_180 DMDFO_CENTER |
B | 800x600x32bpp@60Hz DMDO_180 DMDFO_STRETCH |
C | 800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_CENTER |
D | 800x600x32bpp@60Hz DMDO_DEFAULT DMDFO_STRETCH |
Nessa situação, se o aplicativo tentar definir o monitor como 800x600x32bpp@60Hz, o sistema escolherá o modo de exibição D.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de