Figure 3: Cache the Work Area
Continued from Figure 2: The Virtual Desktop
This code snippet caches the work area of every monitor for later use.
// 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(
HMONITORhmonitor,
HDChdcMonitor,
LPRClprcMonitor,
DWORDdwData)
{
MONITORINFO mi;
mi.cbSize = sizeof(mi)
GetMonitorInfo(hmonitor, &mi);
*gpRectArray[gCount] = mi.rcWork;
gCount++;
}
Published as Power Programming in the 4/7/98 issue of PC Magazine.