BOOL AddUnattachedDisplayDeviceToDesktop()
{
DWORD DispNum = 0;
DISPLAY_DEVICE DisplayDevice;
DEVMODE defaultMode;
HDC hdc;
int nWidth;
BOOL bFoundSecondary = FALSE;
hdc = ::GetDC(0);
nWidth = ::GetDeviceCaps(hdc,HORZRES);
::ReleaseDC(0,hdc);
// Initialize DisplayDevice.
::ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
// Get display devices.
while ((::EnumDisplayDevices(NULL, DispNum, &DisplayDevice, 0)) &&
(bFoundSecondary == FALSE))
{
::ZeroMemory(&defaultMode, sizeof(DEVMODE));
defaultMode.dmSize = sizeof(DEVMODE);
if (!::EnumDisplaySettings((LPSTR)DisplayDevice.DeviceName,
ENUM_REGISTRY_SETTINGS, &defaultMode))
return FALSE; // Store default failed
if (!(DisplayDevice.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE))
{
//Found the first secondary device.
bFoundSecondary = TRUE;
defaultMode.dmPosition.x += nWidth;
defaultMode.dmFields = DM_POSITION;
::ChangeDisplaySettingsEx((LPSTR)DisplayDevice.DeviceName,
&defaultMode, NULL, CDS_NORESET|CDS_UPDATEREGISTRY, NULL);
// A second call to ChangeDisplaySettings updates the monitor.
::ChangeDisplaySettings(NULL, 0);
}
// Reinitialize DisplayDevice.
::ZeroMemory(&DisplayDevice, sizeof(DisplayDevice));
DisplayDevice.cb = sizeof(DisplayDevice);
DispNum++;
} // End while the display devices.
return TRUE;
}
void CMonitorTestDlg::OnBnClickedButton5()
{
DetachDisplay();
//TODO: 在此添加控件通知处理程序代码
}
本文介绍了一个用于在Windows系统中通过编程方式添加未连接的显示设备到桌面的方法。此方法利用了枚举显示设备、获取默认显示设置及修改显示配置等API函数实现。文中详细展示了如何定位并设置第二个显示器的位置。

2435

被折叠的 条评论
为什么被折叠?



