VC++ Win API 获取屏幕数量和分辨率和位置等信息

这里给出了可以使用的代码 但有待优化 期望有朋友给出建议

	//枚举所有屏幕 
	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);
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值