0

我正在尝试使用 ChangeDisplaySettingsEx 函数将桌面拉伸到两台显示器。我希望桌面分辨率为 3840x1080 而不是 1920x1080 分辨率。我尝试了以下方法:

 POINTL posPrimary={0};
 posPrimary.x=0
 posPrimary.y=0;

 DEVMODE mode_primary = {0};
 mode_primary.dmSize = sizeof(mode_primary);
 mode_primary.dmFields = DM_POSITION;
 mode_primary.dmPosition = posPrimary;
 mode_primary.dmPelsWidth = 3840;
 mode_primary.dmPelsHeight = 1080;

LONG status = ChangeDisplaySettingsEx(
    nameofMonitor,
    &mode_primary,
    nullptr, // reserved
   CDS_SET_PRIMARY | CDS_UPDATEREGISTRY,
    nullptr // no video parameter
);
  if (DISP_CHANGE_SUCCESSFUL != status) {
    printf("ChangeDisplaySettingsEx returned %d", status);
    return -__LINE__;
}

我还尝试了 SetDisplayConfig 函数:

SetDisplayConfig(0,NULL,0,NULL,SDC_TOPOLOGY_CLONE|SDC_APPLY);

SDC_TOPOLOGY_CLONE 只是克隆监视器,而 SDC_TOPOLOGY_EXTEND 将桌面扩展到第二个显示器。

任何建议,将不胜感激。

4

2 回答 2

1

Windows 7 不支持跨多个显示器“拉伸”桌面。您可以将桌面扩展到多台显示器,但您始终必须选择哪个显示器作为主显示器。任务栏出现在主显示器上,无法将其延伸到其他显示器。

Windows 8 具有更好的多显示器支持,并允许在每个显示器上都有一个任务栏。您可以将相同的任务栏配置为在所有屏幕上,或在单个任务栏上配置该屏幕上的窗口图标。AFAIK,你仍然不能在所有显示器上都有一个任务栏。

更新

我对此进行了更多思考,突然想到,视频卡驱动程序可以将多个监视器作为具有组合分辨率的单个设备呈现给 Windows。此配置将是视频卡供应商专有的,如果确实存在,您必须使用他们的 API 来访问该功能。

于 2012-09-13T02:58:21.423 回答
0

The other option is to use a device like SAPPHIRE Vid-2X or Matrox 2H2Go. These will include 3840x1080 in their EDID so you can use SetDisplayConfig to setup 1920x1080 and you will get cloned diwplays or setup 3840x1080 to get one desktop stretched across both displays. This way you are graphics card/vendor agnostic. Note that you need DL-DVI or DP to make this work.

于 2013-05-01T00:38:37.590 回答