这里给出了可以使用的代码 但有待优化 期望有朋友给出建议
//枚举所有屏幕
DISPLAY_DEVICE ddDisplay;
ZeroMemory(&ddDisplay, sizeof(ddDisplay));
ddDisplay.cb = sizeof(ddDisplay);
DEVMODE dm;
ZeroMemory(&dm, sizeof(dm));
dm.dmSize = sizeof(dm);
//获取屏幕数量
int screenNUm = GetSystemMetrics(SM_CMONITORS);
if (screenNUm < 2)
{
//L"未发现第二个屏幕,请检查投影是否正常分屏"
}
//因为屏幕不是连续的所以需要逐个遍历 具体应该遍历多个才合适我不请
//期望专业人士给予指点 默认屏幕在0位 但是接入的屏幕不在1位
for (char i = 1; i < screenNUm + 10; i++)
{
//下一步活为了获得每个显示设备的名字
int flag = EnumDisplayDevices(NULL, i, &ddDisplay, NULL);
flag = flag&&EnumDisplaySettings(ddDisplay.DeviceName, ENUM_CURRENT_SETTINGS, &dm);
if (!flag)
{
continue;
}
HDC desktopDc = GetDC(NULL);
int DPI = GetDeviceCaps(desktopDc, LOGPIXELSX);
DeleteDC(desktopDc);
float Bili;//屏幕的放大比例
switch (DPI)
{
case 96:
Bili = 1.0;
break;
case 120:
Bili = 1.25;
break;
case 144:
Bili = 1.50;
break;
case 192:
Bili = 2.00;
break;
default:
break;
}
//这里拿到了第二屏幕的尺寸信息
CRect Sc2Rect = CRect(dm.dmPosition.x*Bili,
dm.dmPosition.y*Bili,
(dm.dmPosition.x + dm.dmPelsWidth)*Bili,
(dm.dmPosition.y + dm.dmPelsHeight)*Bili);
}