65,187
社区成员




BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor,
HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
static BOOL first = TRUE; //标志
std::vector<CRect> * pRect = (std::vector<CRect>*)dwData;
//保存显示器信息
MONITORINFO monitorinfo;
monitorinfo.cbSize = sizeof(MONITORINFO);
//获得显示器信息,将信息保存到monitorinfo中
GetMonitorInfo(hMonitor, &monitorinfo);
//若检测到主屏
if (monitorinfo.dwFlags == MONITORINFOF_PRIMARY)
{
if (first) //第一次检测到主屏
{
first = FALSE;
pRect->push_back(monitorinfo.rcMonitor);
}
else //第二次检测到主屏,说明所有的监视器都已经检测了一遍,故可以停止检测了
{
first = TRUE; //标志复位
return FALSE; //结束检测
}
}
else
{
pRect->push_back(monitorinfo.rcMonitor);
}
first = TRUE; // 恢复主屏标记为初始状态
return TRUE;
}
// 检测显示器数量
std::vector<CRect> vRect;
EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)&vRect); // 枚举所有显示器的Rect