3

次のように、ボタンクリックでプライマリモニターを切り替える小さなアプリケーションを作成しました。

Monitor 0 --> Monitor 1 --> Monitor 2

ボタンをクリックするたびに、プライマリ モニターが 3 つの間で切り替わります。

ボタンをクリックするたびにモニターを正常に切り替えることができ、モニターの座標は

(0,0)
(1920,0)
(3840,0)

3つのケースすべてで達成することもできます。ただし、モニターをモニター 2 からモニター 0 に切り替えようとすると、次のモニター座標が返されます。

(0,0)
(0,0)
(1920,0)

ChangeDisplaySettingEx 関数はエラーを返さず、モニターは期待どおりに機能します。返された座標が正しくないため、配置しようとしているウィンドウが正しく配置されていません。2 番目の画面に配置する必要があるウィンドウは、最初の画面に配置されます。

これは、現在モニターを切り替える方法のコードサンプルです。

             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