⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 multiscreen.cpp

📁 详细介绍:安装多屏卡的PC机
💻 CPP
字号:
// MultiScreen.cpp: implementation of the CMultiScreen class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//#include "SMCat.h"
#include <winuser.h>
#include "MultiScreen.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define USER_CESHI_VERSION  0
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMultiScreen::CMultiScreen()
{
	m_nScreenNum=0;
}

CMultiScreen::~CMultiScreen()
{

}

void CMultiScreen::GetScreenInfo()
{
	m_nScreenNum=0;
	if(!EnumDisplayMonitors(NULL,NULL,MonitorEnumProc,LPARAM(this))){
		m_nScreenNum=0;
	}

}

BOOL CALLBACK CMultiScreen::MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
	CMultiScreen  *pMultiScreen;
	CString str;

	pMultiScreen=(CMultiScreen *)(dwData);

	if(pMultiScreen->m_nScreenNum>=MAX_SCREEN_NUM) return true;
	if(dwData==NULL) return false;

	//此处为获得多屏信息。
	pMultiScreen->m_Rects[pMultiScreen->m_nScreenNum]=*lprcMonitor;
	str.Format("screen num=%d",pMultiScreen->m_nScreenNum);
	//AfxMessageBox(str);
	str.Format("%d,%d,%d,%d",lprcMonitor->left,lprcMonitor->top,lprcMonitor->right,lprcMonitor->bottom);
	//AfxMessageBox(str);

	MONITORINFOEX monitorInfo;
	monitorInfo.cbSize=sizeof(MONITORINFOEX);

	GetMonitorInfo(hMonitor,&monitorInfo);
	//AfxMessageBox(monitorInfo.szDevice);
	if(monitorInfo.dwFlags&MONITORINFOF_PRIMARY){
		pMultiScreen->m_nPrimaryScreenNum=pMultiScreen->m_nScreenNum;
		sprintf(pMultiScreen->m_szDevices[pMultiScreen->m_nScreenNum],"%s","主屏");
		//AfxMessageBox("MONITORINFOF_PRIMARY");
	}else{
		sprintf(pMultiScreen->m_szDevices[pMultiScreen->m_nScreenNum],"%s",monitorInfo.szDevice);
		//AfxMessageBox(pMultiScreen->m_szDevices[pMultiScreen->m_nScreenNum]);
	}

	//AfxMessageBox(pMultiScreen->m_szDevices[pMultiScreen->m_nScreenNum]);
	pMultiScreen->m_nScreenNum++;
	return true;
}

int CMultiScreen::GetScreenInfo2()
{
	int iCount;
	typedef BOOL (WINAPI* pEnumDisplayDevices)(PVOID,DWORD,PVOID,DWORD);
	typedef BOOL (WINAPI* pEnumDisplaySettings)(PVOID,DWORD,PVOID);

	pEnumDisplayDevices pStartEnumDisplayDevices;
	pEnumDisplaySettings pStartEnumDisplaySettings;

	pStartEnumDisplayDevices = (pEnumDisplayDevices)GetProcAddress(LoadLibrary("USER32"), "EnumDisplayDevicesA");
	pStartEnumDisplaySettings = (pEnumDisplaySettings)GetProcAddress(LoadLibrary("USER32"), "EnumDisplaySettingsA");


	if (pStartEnumDisplayDevices && pStartEnumDisplaySettings)
	{
		DISPLAY_DEVICE dd;
		DEVMODE dv;

		ZeroMemory(&dv, sizeof(dv));
		ZeroMemory(&dd, sizeof(dd));

		dv.dmSize = sizeof(dv);
		dd.cb = sizeof(dd);

		for (iCount=0; (*pStartEnumDisplayDevices)(NULL, iCount, &dd, 0); iCount++)
		{
			(*pStartEnumDisplaySettings)(dd.DeviceName,ENUM_CURRENT_SETTINGS,&dv);
			if((dd.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) 
				&&(dd.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
			{
				CString strDispName,strScreen,strColor,strFreq;

				strDispName.Format(_T("Device Name: %s "),dd.DeviceString);
				//SetDlgItemText(IDC_STATIC_DISP_NAME,strDispName);
				//AfxMessageBox(strDispName);

				strScreen.Format(_T("%d×%d "),dv.dmPelsWidth,dv.dmPelsHeight);
				//SetDlgItemText(IDC_STATIC_FREQ,strScreen);
				//AfxMessageBox(strScreen);

				strColor.Format(_T("%d Bit"),dv.dmBitsPerPel);
				//SetDlgItemText(IDC_STATIC_COLOR,strColor);
				//AfxMessageBox(strColor);

				strFreq.Format(_T("%d Hz"),dv.dmDisplayFrequency);
				//SetDlgItemText(IDC_STATIC_REFRESH_FREQ,strFreq);
				//AfxMessageBox(strFreq);
			}
		}
		m_nScreenNum=iCount;
		return iCount;
	}

	m_nScreenNum=iCount;
	return 1;
}

int CMultiScreen::GetScreenNum()
{
	//CString str;
	//str.Format("screen num=%d",m_nScreenNum);
	//AfxMessageBox(str);
	if(USER_CESHI_VERSION==1){
		if(m_nScreenNum>1) return 2;
		else return 1;
	}else	return m_nScreenNum;
}

bool CMultiScreen::GetWindowRect(const int nIndex, RECT &rect)
{
	if(nIndex>m_nScreenNum-1) return false;
	rect=m_Rects[nIndex];
	return true;
}

bool CMultiScreen::isPrimaryScreen(int nIndex)
{
	return m_nPrimaryScreenNum==nIndex;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -