Сценарий:
Захват экрана на машинах с несколькими дисплеями.
Экран захвата вторичного монитора [который является единственным затронутым]
Отключить Aero:
DwmEnableComposition(DWM\_EC_DISABLECOMPOSITION)
Создать [новый] DC для вторичного монитора с помощью:
m_DC->CreateDC(_T("DISPLAY"), _T("\\.\DISPALY2", NULL, NULL);
Результат:
DC получит смещение, которое «указывает» на неправильную часть виртуального дисплея
CPoint DCOffset;
BOOL ok = ::GetDCOrgEx( hDC, &DCOffset );
, где DCOffset.x
и .y
будут! = 0
Примечания:
Такое поведение не происходит в Vista
Если есть задержка между отключением Aero и созданием DC, может случиться так, что DC некоторое время будет корректным [== no Offset], но если окна перемещены или их z-порядок изменен, DC получит смещение. Обходной путь: Создайте новый DC при смещении.
затронутые графические адаптеры: Intel GMA 4500, Nvidia 9600GT