Teilen über


Enumerations- und Anzeigesteuerelement

Rufen Sie zum Aufzählen aller Geräte auf dem Computer die EnumDisplayDevices-Funktion auf. Die zurückgegebenen Informationen geben auch an, welcher Monitor Teil des Desktops ist.

Rufen Sie EnumDisplayMonitorsauf, um die Geräte auf dem Desktop aufzurufen, die einen Clippingbereich überschneiden. Dadurch wird das HMONITOR-Handle für jeden Monitor zurückgegeben, der mit GetMonitorInfo-verwendet wird. Verwenden Sie zum Aufzählen aller Geräte auf dem virtuellen Bildschirm EnumDisplayMonitors. wie im folgenden Code dargestellt:

EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);  

Verwenden Sie zum Abrufen von Informationen zu einem Anzeigegerät EnumDisplaySettings oder EnumDisplaySettingsEx-.

Die ChangeDisplaySettingsEx--Funktion wird verwendet, um die Anzeigegeräte auf dem Computer zu steuern. Sie kann die Konfiguration der Geräte ändern, z. B. die Position eines Monitors auf dem virtuellen Desktop angeben und die Bittiefe jeder Anzeige ändern. In der Regel verwendet eine Anwendung diese Funktion nicht. Wenn Sie einem System mit mehreren Monitoren programmgesteuert einen Anzeigemonitor hinzufügen möchten, legen Sie DEVMODE.dmFields auf DM_POSITION fest, und geben Sie eine Position (unter Verwendung von DEVMODE.dmPosition) für den Monitor an, den Sie hinzufügen, die an mindestens ein Pixel des Anzeigebereichs eines vorhandenen Monitors angrenzen. Um den Monitor zu trennen, legen Sie DEVMODE.dmFields- auf DM_POSITION fest, und legen Sie DEVMODE.dmPelsWidth- und DEVMODE.dmPelsHeight- auf Null fest.

Der folgende Code veranschaulicht, wie alle sekundären Anzeigegeräte vom Desktop getrennt werden:

void DetachDisplay()
{
    BOOL            FoundSecondaryDisp = FALSE;
    DWORD           DispNum = 0;
    DISPLAY_DEVICE  DisplayDevice;
    LONG            Result;
    TCHAR           szTemp[200];
    int             i = 0;
    DEVMODE   defaultMode;

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

    // get all display devices
    while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
        {
        ZeroMemory(&defaultMode, sizeof(DEVMODE));
        defaultMode.dmSize = sizeof(DEVMODE);
        if ( !EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &defaultMode) )
                  OutputDebugString("Store default failed\n");

        if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) &&
            !(DisplayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
            {
            DEVMODE    DevMode;
            ZeroMemory(&DevMode, sizeof(DevMode));
            DevMode.dmSize = sizeof(DevMode);
            DevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_POSITION
                        | DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS ;
            Result = ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName, 
                                            &DevMode,
                                            NULL,
                                            CDS_UPDATEREGISTRY,
                                            NULL);

            //The code below shows how to re-attach the secondary displays to the desktop

            //ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
            //                       &defaultMode,
            //                       NULL,
            //                       CDS_UPDATEREGISTRY,
            //                       NULL);

            }

        // Reinit DisplayDevice just to be extra clean

        ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
        DisplayDevice.cb = sizeof(DisplayDevice);
        DispNum++;
        } // end while for all display devices
}

Für jedes Anzeigegerät kann die Anwendung Informationen in der Registrierung speichern, die die Konfigurationsparameter für das Gerät sowie Standortparameter beschreiben. Die Anwendung kann auch bestimmen, welche Displays Teil des Desktops sind und welche nicht, über das DISPLAY_DEVICE_ATTACHED_TO_DESKTOP Flag in der DISPLAY_DEVICE-Struktur. Sobald alle Konfigurationsinformationen in der Registrierung gespeichert sind, kann die Anwendung ChangeDisplaySettingsEx- erneut aufrufen, um die Einstellungen dynamisch zu ändern, ohne dass ein Neustart erforderlich ist.