分屏显示

Posted on 2017-04-20 16:05  KA卡尔特人头狼  阅读(147)  评论(0编辑  收藏  举报

void CTouchDlg::OnInitialDialog()
{
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)this);
}


BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,HDC dc, LPRECT rc,
LPARAM dwData)
{

dc = dc;//这句无其他用途,仅供去除waring
rc = rc;//这句无其他用途,仅供去除waring

CTouchDlg* pThis = (CTouchDlg*)dwData;
static BOOL first = TRUE; //标志

//保存显示器信息
MONITORINFO monitorinfo;
monitorinfo.cbSize = sizeof(MONITORINFO);

//获得显示器信息,将信息保存到monitorinfo中
GetMonitorInfo(hMonitor, &monitorinfo);

//若检测到主屏
if(monitorinfo.dwFlags == MONITORINFOF_PRIMARY)
{
if(first) //第一次检测到主屏
{
first = FALSE;
pThis->m_numScreen++;

//将显示器的分辨率信息保存到rect
pThis->m_rect[0] = monitorinfo.rcMonitor;
return TRUE;

}
else //第二次检测到主屏,说明所有的监视器都已经检测了一遍,故可以停止检测了
{
first = TRUE; //标志复位
return FALSE; //结束检测
}
}
else
{
pThis->m_rect[1] = monitorinfo.rcMonitor;
pThis->m_numScreen++;
}

return TRUE;
}