效果就好像通过打开“显示属性”-“设置”-“将windows桌面扩展到该显示器上”的效果一样。但不是模拟这样的操作过程,希望是通过api或者是注册表来修改。不知道有没有大侠帮忙解决一下。
先谢过了。

解决方案 »

  1.   

    search some keys words like "ChangeDisplaySettingsEx"
      

  2.   

    int SetDisplaySetting()
    {
        DWORD DispNum = 0;
        DISPLAY_DEVICE DisplayDevice;
        DEVMODE defaultMode;
        HDC hdc;
        int nWidth;
        BOOL bFoundSecondary = FALSE;
        try
        {
            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++;
            }
            return 0;
        }catch(Exception &ex)
        {
            return -1;
        }
    }