Winapi Windows 7监视器交换错误
我编写了一个小应用程序,按如下所示切换主监视器:Winapi Windows 7监视器交换错误,winapi,windows-7,multiple-monitors,Winapi,Windows 7,Multiple Monitors,我编写了一个小应用程序,按如下所示切换主监视器: Monitor 0 --> Monitor 1 --> Monitor 2 每次单击按钮,主监视器都会在三个按钮之间切换 我能够成功地切换显示器,每次我点击按钮,显示器坐标应该是 (0,0) (1920,0) (3840,0) 在这三种情况下,我也能做到这一点。但是,当我尝试将监视器从监视器2切换到监视器0时,返回的监视器坐标为: (0,0) (0,0) (1920,0) ChangeDisplaySettingEx函数不返回任
Monitor 0 --> Monitor 1 --> Monitor 2
每次单击按钮,主监视器都会在三个按钮之间切换
我能够成功地切换显示器,每次我点击按钮,显示器坐标应该是
(0,0)
(1920,0)
(3840,0)
在这三种情况下,我也能做到这一点。但是,当我尝试将监视器从监视器2切换到监视器0时,返回的监视器坐标为:
(0,0)
(0,0)
(1920,0)
ChangeDisplaySettingEx函数不返回任何错误,监视器只按预期工作。由于返回的坐标不正确,因此我尝试定位的窗口位置不正确。必须放置在第二个屏幕上的窗口将放置在第一个屏幕上
以下是我当前如何切换监视器的代码示例:
next_position++;
if(next_position>2)
{
next_position=0;
}
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;
LONG status = ChangeDisplaySettingsEx(
nameofMonitor[next_position],
&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__;
}
int m =1;
for(int var =0; var<=2;var++)
{
posPrimary.y=0;
posPrimary.x=dxWidthPrimary*m;
m++;
DEVMODE mode_primary = {0};
mode_primary.dmSize = sizeof(mode_primary);
mode_primary.dmFields = DM_POSITION;
mode_primary.dmPosition = posPrimary;
if(var!=next_position)
{
status = ChangeDisplaySettingsEx(
nameofMonitor[var],
&mode_primary,
nullptr, // reserved
CDS_GLOBAL | CDS_UPDATEREGISTRY,
nullptr // no video parameter
);
if (DISP_CHANGE_SUCCESSFUL != status) {
printf("ChangeDisplaySettingsEx returned %d", status);
return -__LINE__;
}
}
}
ChangeDisplaySettingsEx (NULL, NULL, NULL, 0, NULL);
next_position++;
如果(下一个位置>2)
{
下一个位置=0;
}
POINTL posPrimary={0};
posPrimary.x=0
posPrimary.y=0;
DEVMODE模式_primary={0};
mode_primary.dmSize=sizeof(mode_primary);
mode_primary.dmFields=DM_位置;
模式_primary.dmPosition=posPrimary;
长状态=更改显示设置性别(
监视器名称[下一个位置],
&主模式,
nullptr,//保留
CDS_集_主| CDS_更新注册表,
nullptr//无视频参数
);
如果(显示更改成功!=状态){
printf(“ChangeDisplaySettingsEx返回%d”,状态);
返回-\uuuu行\uuuuu;
}
int m=1;
对于(int-var=0;var