3

我写了一个小应用程序来切换主监视器上的按钮单击,如下所示:

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) 来覆盖这个错误条件?我在这里找不到问题

4

0 回答 0