C++ 监视器的垂直放置
如何将显示器设置为垂直位置 下面的代码可以设置分辨率和刷新率,但我不知道如何将这两个监视器设置为垂直位置 我尝试过dm.dmDisplayOrientation,但没有成功。 将“显示”设置为“垂直对齐”时,是否还有其他需要配置的内容 使用windows显示设置进行设置时,垂直对齐有效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
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++对齐。