Makale numarası: 308216 - Son Gözden Geçirme: 04 Nisan 2006 Salı - Gözden geçirme: 3.3

SORUN: ChangeDisplaySettingsEx işlevini ikincil bir monitörü eklemek için kullandığınız sonra bilgisayarı yeniden başlatmanız gerekir

Sistem İpucuBu makale, kullandığınızdan farklı bir işletim sistemine yöneliktir. Sizinle ilgili olmayabilecek makale içeriği devre dışı bırakıldı.
Hepsini aç | Hepsini kapa

Belirtiler

Ikincil monitör masaüstüne eklemek ChangeDisplaySettingsEx işlevini kullandığınızda, bilgisayar yeniden başlatılıncaya kadar bir Windows 2000 veya Windows XP tabanlı bir sistemin, değişikliğin etkili olmaz.

Neden

Bu sorun, bir çift görünümü uygulaması ile harici bir CRT Ekran hem yerleşik LCD görüntü kullanabileceğiniz kullanan birden çok monitör taşınabilir bilgisayarlarda oluşur.

Çözüm

Bu sorunu gidermek için <a0></a0>, hemen, ikincil monitörümde masaüstüne eklemek ChangeDisplaySettingsEx çağırdıktan sonra Masaüstü güncelleştirme ChangeDisplaySettings(NULL, 0) arayın. Bu işlem, sistem kayıt defterindeki ayarları kullanmak neden olur ve görüntü aygıtlarının her birine sıfırlar.

Daha fazla bilgi

Aşağıdaki kod, bulduğu ilk ikincil aygıtı masaüstüne iliştirir gerektirmeden bilgisayarı yeniden başlatın:
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;
}
				

Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Platform Software Development Kit - Ocak 2000 Sürümü, Ne zaman ne ile kullanilir:
    • the operating system: Microsoft Windows XP
    • the operating system: Microsoft Windows 2000
Anahtar Kelimeler: 
kbmt kbdswgdi2003swept kbgdi kbmultimon kbprb KB308216 KbMttr
Otomatik TercümeOtomatik Tercüme
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:308216  (http://support.microsoft.com/kb/308216/en-us/ )