ID do artigo: 308216 - Última revisão: terça-feira, 4 de abril de 2006 - Revisão: 3.3

PROBLEMA: Você deve reiniciar o computador após usar a função ChangeDisplaySettingsEx para anexar um monitor secundário

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sintomas

Em um sistema baseado no Windows XP ou Windows 2000, quando você usa a função ChangeDisplaySettingsEx para conectar um monitor secundário para a área de trabalho, a alteração não terá efeito até que você reinicie o computador.

Causa

Esse problema ocorre em monitores múltiplos computadores portáteis que usam uma implementação de modo de exibição dupla, com o qual você pode usar tanto um vídeo externo do CRT e o monitor LCD interno.

Resolução

Para resolver esse problema, chame ChangeDisplaySettings(NULL, 0) para atualizar a área de trabalho imediatamente após chamar ChangeDisplaySettingsEx para anexar o monitor secundário a área de trabalho. Isso faz com que o sistema para usar as configurações no registro e redefine cada uma dos dispositivos de vídeo.

Mais Informações

O código a seguir anexa o primeiro dispositivo secundário que ele encontra a área de trabalho sem exigir que você reinicie o computador:
BOOL AddUnattachedDisplayDeviceToDesktop()
{
    DWORD DispNum = 0;
    DISPLAY_DEVICE DisplayDevice;
    DEVMODE defaultMode;
    HDC hdc;
    int nWidth;
    BOOL bFoundSecondary = FALSE;

    hdc = GetDC(0);
    nWidth = GetDeviceCaps(hdc,HORZRES);
    ReleaseDC(0,hdc);

    // Initialize DisplayDevice.
    ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
    DisplayDevice.cb = sizeof(DisplayDevice);

    // Get display devices.
    while ((EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0)) &&
           (bFoundSecondary == FALSE))
    { 
        ZeroMemory(&defaultMode, sizeof(DEVMODE));
        defaultMode.dmSize = sizeof(DEVMODE);
        if (!EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName,
             ENUM_REGISTRY_SETTINGS, &defaultMode))
            return FALSE; // Store default failed

        if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
        {
            //Found the first secondary device.
            bFoundSecondary = TRUE;
            defaultMode.dmPosition.x += nWidth;
            defaultMode.dmFields = DM_POSITION; 
            ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName, 
                    &defaultMode, NULL, CDS_NORESET|CDS_UPDATEREGISTRY, NULL); 

            // A second call to ChangeDisplaySettings updates the monitor.
            ChangeDisplaySettings(NULL, 0); 
        } 

        // Reinitialize DisplayDevice. 
        ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
        DisplayDevice.cb = sizeof(DisplayDevice);
        DispNum++;
    } // End while the display devices. 
    return TRUE;
}
				

A informação contida neste artigo aplica-se a:
  • Microsoft Platform Software Development Kit-January 2000 Edition nas seguintes plataformas
    • the operating system: Microsoft Windows XP
    • the operating system: Microsoft Windows 2000
Palavras-chave: 
kbmt kbdswgdi2003swept kbgdi kbmultimon kbprb KB308216 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 308216  (http://support.microsoft.com/kb/308216/en-us/ )