這裏給出了可以使用的代碼 但有待優化 期望有朋友給出建議
//枚舉所有屏幕
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);
}