// global variables to store work area
int 		gCount;
LPRECT 	gpRectArray = NULL;

void CacheWorkAreas()
{
// set the counter to 0
gCount = 0;  
// delete old array, since number of monitors may have changed
delete [] gpRectArray;
// allocate a new array sized to the number of monitors  
gpRectArray = new RECT[GetSystemMetrics(SM_CMONITORS)];
EnumDisplayMonitors(NULL, NULL, monitorEnumInfoProc, 0);
}

// definition of callback function
BOOL CALLBACK monitorEnumProc(
	HMONITOR		hmonitor,
	HDC			hdcMonitor,
	LPRC			lprcMonitor,
	DWORD		dwData)
{
	MONITORINFO mi;
	mi.cbSize = sizeof(mi)
	GetMonitorInfo(hmonitor, &mi);

	*gpRectArray[gCount] = mi.rcWork;
	gCount++;
}

