📄 multiscreen.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 + -