Função EnumDisplayMonitors (winuser.h)
A função EnumDisplayMonitors enumera monitores de exibição (incluindo pseudo-monitores invisíveis associados aos drivers de espelhamento) que cruzam uma região formada pela interseção de um retângulo de recorte especificado e a região visível de um contexto de dispositivo. EnumDisplayMonitors chama uma função de retorno de chamada MonitorEnumProc definida pelo aplicativo uma vez para cada monitor enumerado. Observe que GetSystemMetrics (SM_CMONITORS) conta apenas os monitores de exibição.
Sintaxe
BOOL EnumDisplayMonitors(
[in] HDC hdc,
[in] LPCRECT lprcClip,
[in] MONITORENUMPROC lpfnEnum,
[in] LPARAM dwData
);
Parâmetros
[in] hdc
Um identificador para um contexto de dispositivo de exibição que define a região visível de interesse.
Se esse parâmetro for NULL, o parâmetro hdcMonitor passado para a função de retorno de chamada será NULL e a região visível de interesse será a tela virtual que abrange todas as exibições na área de trabalho.
[in] lprcClip
Um ponteiro para uma estrutura RECT que especifica um retângulo de recorte. A região de interesse é a interseção do retângulo de recorte com a região visível especificada pelo hdc.
Se hdc não for NULL, as coordenadas do retângulo de recorte serão relativas à origem do hdc. Se hdc for NULL, as coordenadas serão coordenadas de tela virtual.
Esse parâmetro poderá ser NULL se você não quiser recortar a região especificada pelo hdc.
[in] lpfnEnum
Um ponteiro para uma função de retorno de chamada definida pelo aplicativo MonitorEnumProc .
[in] dwData
Dados definidos pelo aplicativo que EnumDisplayMonitors transmitem diretamente para a função MonitorEnumProc .
Valor retornado
Se a função for bem-sucedida, o valor retornado será diferente de zero.
Se a função falhar, o valor retornado será zero.
Comentários
Há dois motivos para chamar a função EnumDisplayMonitors :
- Você deseja desenhar de maneira ideal em um contexto de dispositivo que abrange vários monitores de exibição e os monitores têm formatos de cor diferentes.
- Você deseja obter um identificador e um retângulo de posição para um ou mais monitores de exibição.
Você não precisa usar a função EnumDisplayMonitors quando uma janela abrange monitores de exibição que têm formatos de cor diferentes. Você pode continuar a pintar sob a suposição de que toda a tela tem as propriedades de cor do monitor primário. Suas janelas ficarão bem. EnumDisplayMonitors apenas permite que você os faça parecer melhor.
Definir o parâmetro hdc como NULL permite que você use a função EnumDisplayMonitors para obter um retângulo de alça e posição para um ou mais monitores de exibição. A tabela a seguir mostra como as quatro combinações de valores NULL e não NULLhdc e lprcClip afetam o comportamento da função EnumDisplayMonitors .
hdc | lprcRect | Comportamento de EnumDisplayMonitors |
---|---|---|
NULL | NULL | Enumera todos os monitores de exibição. A função de retorno de chamada recebe um HDC NULL . |
NULL | não NULL | Enumera todos os monitores de exibição que cruzam o retângulo de recorte. Use coordenadas de tela virtual para o retângulo de recorte. A função de retorno de chamada recebe um HDC NULL . |
não NULL | NULL | Enumera todos os monitores de exibição que cruzam a região visível do contexto do dispositivo. A função de retorno de chamada recebe um identificador para um controlador de domínio para o monitor de exibição específico. |
não NULL | não NULL | Enumera todos os monitores de exibição que cruzam a região visível do contexto do dispositivo e o retângulo de recorte. Use coordenadas de contexto do dispositivo para o retângulo de recorte. A função de retorno de chamada recebe um identificador para um controlador de domínio para o monitor de exibição específico. |
Exemplos
Para pintar em resposta a uma mensagem WM_PAINT, usando os recursos de cada monitor, você pode usar código como este em um procedimento de janela:
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
EnumDisplayMonitors(hdc, NULL, MyPaintEnumProc, 0);
EndPaint(hwnd, &ps);
Para pintar a metade superior de uma janela usando os recursos de cada monitor, você pode usar um código como este:
GetClientRect(hwnd, &rc);
rc.bottom = (rc.bottom - rc.top) / 2;
hdc = GetDC(hwnd);
EnumDisplayMonitors(hdc, &rc, MyPaintEnumProc, 0);
ReleaseDC(hwnd, hdc);
Para pintar a tela virtual inteira de maneira ideal para cada monitor de exibição, você pode usar um código como este:
hdc = GetDC(NULL);
EnumDisplayMonitors(hdc, NULL, MyPaintScreenEnumProc, 0);
ReleaseDC(NULL, hdc);
Para recuperar informações sobre todos os monitores de exibição, use um código como este:
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winuser.h (inclua Windows.h) |
Biblioteca | User32.lib |
DLL | User32.dll |
Conjunto de APIs | ext-ms-win-ntuser-sysparams-ext-l1-1-1 (introduzido no Windows 10, versão 10.0.14393) |