我写了一个小应用程序来点击按钮点击主监视器,如下所示:
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);
由于我的代码按预期工作,我是否应该通过将(0,0)更改为(3840,0)来覆盖此错误情况?我无法在这里找到问题