Come hai scoperto, lo EnumDisplayMonitors()
farà il lavoro ma è un po 'difficile da chiamare. La documentazione indica:
la funzione EnumDisplayMonitors enumera monitor di visualizzazione (inclusa invisibili pseudo-monitor associati con i driver mirroring) che si intersecano una regione formata dall'intersezione di un rettangolo di ritaglio specificato e la regione visibile di un contesto di periferica. EnumDisplayMonitors chiama una funzione di callback MonitorEnumProc definita dall'applicazione una volta per ogni monitor che viene enumerato. Si noti che GetSystemMetrics (SM_CMONITORS) conta solo i monitor di visualizzazione.
Questo ci porta a una soluzione più semplice: GetSystemMetrics(SM_CMONITORS)
. In effetti questo potrebbe essere anche meglio di EnumDisplayMonitors()
se si dispone di monitor psuedo.
come illustrazione di chiamare EnumDisplayMonitors()
provare questo:
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
int *Count = (int*)dwData;
(*Count)++;
return TRUE;
}
int MonitorCount()
{
int Count = 0;
if (EnumDisplayMonitors(NULL, NULL, MonitorEnumProc, (LPARAM)&Count))
return Count;
return -1;//signals an error
}
fonte
2011-10-14 11:42:38
La pagina di MSDN si è collegato menziona usando GetSystemMetrics (SM_CMONITORS) per contare il numero di visualizzazioni fisiche. Funziona per te? – IronMensan