Обычные экранные лупы создают окно и на него StretchBltят кусок экрана вокруг указателя мыши или курсора. Я хочу сделать необычную, которая бы использовала для отображения весь экран. Для статичного изображения это очень просто - достаточно отStretchBltить GetWindowDC(GetDesktopWindow()) на него самого. Как быть, если я хочу работать с увеличенным экраном (который будет прокручиваться при движении мыши), нажимать кнопки и т.п., чтобы это не приводило к артефактам? Можно ли как-нибудь перенаправить вывод графической подсистемы на заданный DC (или как-нибудь через winsta?), а самому монопольно работать с GetWindowDC(GetDesktopWindow())? Я встречал похожую программу Pivot - она способна поворачивать экран и с ним можно работать в перевернутом состоянии. Она использует драйвер - обязательно ли это для моей задачи? Если да, то подскажите ключевые слова для поиска.
Основная проблема не с увеличением, а с отрисовкой, полагаю, что для иксов и WinAPI требуемые действия сильно отличаются.
По идее прийдётся ловить весь инпут и перенаправлять всё нужному окну...плюс корректировка на масштаб, плюс перерисовка, поэтому, мне кажется, лучше своё окно, поверх всех...но, артефакт, мигание текстового курсора...И перерисовка на весь экран может давать тормоза... А вот драйвер мне кажется идея по лучше... Но я в них, с применением в этой области, не копался...
Кстати если есть возможность: Программирование графики для Windows ~ 17 704 694 b. Книга большая, плохо отсканенная, но зато именно по твоей теме.
Я не уверен, а что если перехватывать оконную процедуру окон верхнего уровня, а именно сообщение WM_PAINT и заменять в ней hDC на свой hMemDC?