我正在尝试使用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将桌面扩展到第二个显示器。
任何建议都将不胜感激。
答案 0 :(得分:1)
Windows 7不支持跨多个显示器“拉伸”桌面。您可以跨多个监视器扩展桌面,但您始终必须选择哪个监视器作为主监视器。任务栏出现在主监视器上,无法将其延伸到其他监视器。
Windows 8具有更好的多显示器支持,并允许每个显示器上的任务栏。您可以将相同的任务栏配置为在所有屏幕上,或者在该屏幕上配置窗口图标的单个任务栏。 AFAIK,您仍然无法在所有监视器上放置一个任务栏。
<强>更新强>
我正在考虑更多这方面的事情,我发现它可以可能可以让视频卡驱动程序将多个显示器作为具有组合分辨率的单个设备呈现给Windows。此配置对于视频卡供应商来说是专有的,如果确实存在,您必须使用其API来访问该功能。
答案 1 :(得分:0)
另一种选择是使用SAPPHIRE Vid-2X或Matrox 2H2Go等设备。这些将在他们的EDID中包含3840x1080,因此您可以使用SetDisplayConfig设置1920x1080,您将获得克隆的diwplays或设置3840x1080以在两个显示器上拉伸一个桌面。这样你就是显卡/供应商不可知。请注意,您需要DL-DVI或DP来完成这项工作。