C++ 监视器的垂直放置

C++ 监视器的垂直放置,c++,windows,winapi,visual-c++,C++,Windows,Winapi,Visual C++,如何将显示器设置为垂直位置 下面的代码可以设置分辨率和刷新率,但我不知道如何将这两个监视器设置为垂直位置 我尝试过dm.dmDisplayOrientation,但没有成功。 将“显示”设置为“垂直对齐”时,是否还有其他需要配置的内容 使用windows显示设置进行设置时,垂直对齐有效 int main(int argc, char* argv[]) { SetDisplay("DELL S2240L(Analog)",0,0,1600,900,60,false); SetDi

如何将显示器设置为垂直位置

下面的代码可以设置分辨率和刷新率,但我不知道如何将这两个监视器设置为垂直位置

我尝试过dm.dmDisplayOrientation,但没有成功。 将“显示”设置为“垂直对齐”时,是否还有其他需要配置的内容

使用windows显示设置进行设置时,垂直对齐有效

int main(int argc, char* argv[])
{
    SetDisplay("DELL S2240L(Analog)",0,0,1600,900,60,false);
    SetDisplay("DELL S2240L(Hdmi)",0,900,1600,1800,60,true);
    return 0;
}

bool SetDisplay(std::string monitorname,int pox,int poy,int w,int h,int r,bool parent)
{
    DWORD iDevNum(0);
    DISPLAY_DEVICE dd;
    dd.cb = sizeof(dd);

    while ( EnumDisplayDevices(0, iDevNum, &dd, 0) )
    {
        if (dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
        {
            DISPLAY_DEVICE dd2;
            dd2.cb = sizeof(dd2);
            EnumDisplayDevices(dd.DeviceName, 0, &dd2, 0);

            if(monitorname.compare(dd2.DeviceString)==0)
            {                   
                DEVMODE dm;
                ZeroMemory(&dm ,sizeof(dm));
                dm.dmSize = sizeof(DEVMODE);
                if (!EnumDisplaySettings(dd.DeviceName, ENUM_CURRENT_SETTINGS, &dm))
                {
                    std::cout <<"EnumDisplaySettings failed:%d\n"<< GetLastError()<< std::endl;
                    return FALSE;
                }


                dm.dmPelsWidth = w;
                dm.dmPelsHeight = h;

                POINTL po;
                po.x=pox;
                po.y=poy;
                dm.dmPosition = po;
                dm.dmDisplayFrequency = r;


                dm.dmFields = (DM_PELSWIDTH | DM_PELSHEIGHT | DM_DISPLAYFREQUENCY | DM_POSITION );//| DM_DISPLAYORIENTATION );


                if (ChangeDisplaySettings(&dm, CDS_TEST) !=DISP_CHANGE_SUCCESSFUL)
                {
                    std::cout << "Illegal graphics mode: %d\n"<< GetLastError()<< std::endl;                
                }
                else
                {
                    std::cout << "can be applied on "<< dd.DeviceString<< std::endl;
                }

                std::cout << "try applied on "<< dm.dmDeviceName<< std::endl;


                ChangeDisplaySettingsEx(dd.DeviceName, &dm, NULL, CDS_FULLSCREEN| CDS_SET_PRIMARY  , NULL);

            }
            else
            {
                std::cout <<" no "<<monitorname.c_str()<<" =="<<dd2.DeviceString  << std::endl;
            }    
        }
        ++iDevNum;
    }
}
intmain(intargc,char*argv[])
{
设置显示(“DELL S2240L(模拟)”,0,01600900,60,假);
SetDisplay(“DELL S2240L(Hdmi)”,090016001800,60,真);
返回0;
}
bool SetDisplay(标准::字符串监视器名称、int-pox、int-poy、int-w、int-h、int-r、bool父对象)
{
德沃德·伊德夫努姆(0);
显示装置dd;
dd.cb=sizeof(dd);
while(枚举显示设备(0、iDevNum和dd、0))
{
if(dd.StateFlags&显示设备连接到桌面)
{
显示装置dd2;
dd2.cb=sizeof(dd2);
EnumDisplayDevices(dd.DeviceName,0和dd2,0);
if(monitorname.compare(dd2.DeviceString)==0)
{                   
devmodedm;
零内存(&dm,sizeof(dm));
dm.dmSize=sizeof(DEVMODE);
if(!EnumDisplaySettings(dd.DeviceName、ENUM\u CURRENT\u SETTINGS和dm))
{

std::这个问题的可能重复似乎是关于旋转单个监视器,使其横向显示。这个问题似乎是关于任意安排多监视器设置(在本例中,使监视器1位于监视器2上方,如屏幕截图所示)。我不太明白什么不起作用……你是在展示你想要发生的事情,还是实际发生的事情?实际发生的事情与你想要的有什么不同?几乎所有关于[winapi]的“它不起作用”问题都是从一个不检查错误的代码开始的。不要忽略ChangeDisplaySettingsEx()的返回值.我可以从控制面板垂直对齐显示器,但不能从VC++对齐。