VC多屏显示

检测屏幕个数

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:如果对系统虚拟坐标不了解的可以去查看一下相关资料)
示例代码:
 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);
这段代码添加在MFC程序中的OnInitDialog()中,这样程序一开始运行就可以在你想要显示的屏幕中运行.

多屏显示相关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;



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Barry__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值