Win7: DC монитора вторичного монитора смещается при отключении Aero - PullRequest
2 голосов
/ 15 декабря 2009

Сценарий:

Захват экрана на машинах с несколькими дисплеями.

Экран захвата вторичного монитора [который является единственным затронутым]

Отключить 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

...