检测屏幕个数
int WINAPI GetSystemMetrics( __in int nIndex)
用于得到被定义的系统数据或者系统配置信息,检测屏幕个数只要设置nIndex为SM_CMONITORS即可
MSDN的解释为:The number of display monitors on a desktop.
示例代码:
INT iNumber=GetSystemMetrics(SM_CMONITORS); CString csNum; csNum.Format(_T("%d"),iNumber); MessageBox(csNum,_T("显示器数量"),MB_OK);
读取显示器参数及其他参数
该过程使用前面的两个API函数:EnumDisplayDevices和EnumDisplaySettings。
//初始化
BOOL bFlag;
DISPLAY_DEVICE dd;
ZeroMemory(&dd, sizeof(dd));
dd.cb = sizeof(dd);
DEVMODE devMode;
ZeroMemory(&devMode,sizeof(devMode));
devMode.dmSize=sizeof(devMode);
bFlag=EnumDisplayDevices(BULL,iNumber,&dd,0);//如果有该显示器,再去获得它的设置
if(bFlag)
return FLASE;
bFlag=EnumDisplaySettings(dd.DeviceName,ENUM_CURRENT_SETTINGS,&devMode);
iNumber为要查询的显示器编号,从0开始,主屏为0,然后1,2,3....一直下去。查询为EnumDisplaySettings(),查询的数据存储在devMode中,常用的为dmPosition(为当前显示器的坐标位置),dmPelsWidth,dmPelsHeight(为当前显示器的分辨率)
设置当前程序的显示位置
在前两步的基础上,根据自己的需要来设置当前程序的显示坐标(ps:如果对系统虚拟坐标不了解的可以去查看一下相关资料)
示例代码:
这段代码添加在MFC程序中的OnInitDialog()中,这样程序一开始运行就可以在你想要显示的屏幕中运行.CRect reTemp; reTemp.BottomRight()=CPoint(devMode.dmPelsWidth+devMode.dmPosition.x,devMode.dmPelsHeight+devMode.dmPosition.y); reTemp.TopLeft()=CPoint(devMode.dmPosition.x,devMode.dmPosition.y); MoveWindow(&reTemp);
多屏显示相关API介绍
根据窗口句柄、矩形区域、点取得显示器的句柄
MonitorFromRect( lprc, MONITOR_DEFAULTTONULL )
MonitorFromPoint( pt, MONITOR_DEFAULTTONULL )
MonitorFromWindow( pWnd->GetSafeHwnd(), MONITOR_DEFAULTTONULL )
四、根据显示器的句柄返回显示区域
MONITORINFO mi;
RECT rc;
mi.cbSize = sizeof( mi );
::GetMonitorInfo( m_hMonitor, &mi );
rc = mi.rcMonitor;