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.
Para determinar se todos os monitores de exibição em um sistema compartilham o mesmo formato de cor, chame GetSystemMetrics (SM_SAMEDISPLAYFORMAT).

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)

Confira também

GetSystemMetrics

Monitorenumproc

Várias funções de monitores de exibição

Visão geral de vários monitores de exibição