Számbavétel és megjelenítési vezérlő
A számítógép összes eszközének számbavételéhez hívja meg a EnumDisplayDevices függvényt. A visszaadott információk azt is jelzik, hogy melyik monitor az asztal része.
A vágórégiót metsző asztali eszközök számbavételéhez hívja meg EnumDisplayMonitors. Ez minden monitorhoz visszaadja a HMONITOR-leírót, amelyet a GetMonitorInfohasznál. A virtuális képernyő összes eszközének számbavételéhez használja EnumDisplayMonitors. az alábbi kódban látható módon:
EnumDisplayMonitors(NULL, NULL, MyInfoEnumProc, 0);
A megjelenítendő eszközre vonatkozó információk lekéréséhez használja EnumDisplaySettings vagy EnumDisplaySettingsEx.
A ChangeDisplaySettingsEx függvénnyel szabályozható a számítógép kijelzőeszközei. Módosíthatja az eszközök konfigurációját, például megadhatja egy monitor pozícióját a virtuális asztalon, és módosíthatja a kijelzők bitmélységét. Az alkalmazások általában nem használják ezt a függvényt. Ha programozott módon szeretne megjelenítési monitort hozzáadni egy többmonitoros rendszerhez, állítsa DEVMODE.dmFields DM_POSITION, és adjon meg egy pozíciót (DEVMODE.dmPosition használatával) a meglévő monitor megjelenítési területének legalább egy képpontja mellett. A monitor leválasztásához állítsa DEVMODE.dmFields DM_POSITION, és állítsa DEVMODE.dmPelsWidth és DEVMODE.dmPelsHeight nullára.
Az alábbi kód bemutatja, hogyan lehet leválasztani az összes másodlagos megjelenítési eszközt az asztalról:
void DetachDisplay()
{
BOOL FoundSecondaryDisp = FALSE;
DWORD DispNum = 0;
DISPLAY_DEVICE DisplayDevice;
LONG Result;
TCHAR szTemp[200];
int i = 0;
DEVMODE defaultMode;
// initialize DisplayDevice
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
// get all display devices
while (EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0))
{
ZeroMemory(&defaultMode, sizeof(DEVMODE));
defaultMode.dmSize = sizeof(DEVMODE);
if ( !EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName, ENUM_REGISTRY_SETTINGS, &defaultMode) )
OutputDebugString("Store default failed\n");
if ((DisplayDevice.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) &&
!(DisplayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
{
DEVMODE DevMode;
ZeroMemory(&DevMode, sizeof(DevMode));
DevMode.dmSize = sizeof(DevMode);
DevMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_POSITION
| DM_DISPLAYFREQUENCY | DM_DISPLAYFLAGS ;
Result = ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
&DevMode,
NULL,
CDS_UPDATEREGISTRY,
NULL);
//The code below shows how to re-attach the secondary displays to the desktop
//ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
// &defaultMode,
// NULL,
// CDS_UPDATEREGISTRY,
// NULL);
}
// Reinit DisplayDevice just to be extra clean
ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
DispNum++;
} // end while for all display devices
}
Az alkalmazás minden megjelenítési eszközhöz mentheti az eszköz konfigurációs paramétereit és a helyparamétereket leíró információkat a beállításjegyzékben. Az alkalmazás azt is meghatározhatja, hogy mely kijelzők tartoznak az asztalhoz, és melyek nem, a DISPLAY_DEVICE struktúrában lévő DISPLAY_DEVICE_ATTACHED_TO_DESKTOP jelzőn keresztül. Miután az összes konfigurációs információt a beállításjegyzékben tárolta, az alkalmazás újra meghívhatja ChangeDisplaySettingsEx a beállítások dinamikus módosításához, újraindítás nélkül.