@Mana_Banana

Возможно ли создать маску для рабочего стола при работе приложения в окне?

Здравствуйте!
Извиняюсь за возможно идиотский вопрос. На данный момент только начал изучение C++. Работаю исключительно в консольной среде. Исчерпывающую информацию для начинающих получаю в достаточном количестве, но некоторые вещи, которые меня интересуют находятся пока за пределами моего понимания. И очень хотелось бы получить больше направление или примеры, чем конкретные ответы (хотя от последних я тоже не откажусь).
Интересует возможность создания не интерактивной (до определенного момента) маски для рабочего стола. В перспективе хочется сначала написать обычную текстовую игру не большого размера и продолжительности в консоли, при этом задействовав всю остальную область экрана в нужный момент. Вывести в эту область локализированные изображения, 2D анимацию и в целом завершить приложение этим действом, с возможностью вывода так же и звука.
Это возможно при использовании консоли или нужно создать классическое приложение для Windows, имитировать в нём консоль и уже потом вводить все нужные функции? И есть ли примеры, которые не имитируют окно, при этом находясь в полной развёртке, а именно задействуют рабочий стол или вообще всё что выведено на экран за пределами активного окна?
В дальнейшем воздержусь от подобных вопросов, стараясь конкретизировать больше, но пока на подъеме желания решил уточнить эту возможность.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Вам придется работать с winapi.

Вам нужно создать прозрачное окно и рисовать в него то, что идет поверх рабочего стола (гуглите "winapi draw in transparent window").

Чтобы не рисовать поверх каких-то окон - надо в каком-то битмапе нарисовать черным цветом силуэты всех этих окон (надо все окна в системе перебрать - тут вам помогут всякие всякие GetWindowRect, EnumWindows, IsWindowVisible.). И при проприсовке надо этот битмап брать как маску (гуглите "winapi clip region").

Сообщения о кликах мышкой надо аккуратно передавать в окно, которое открыто по данным координатам. Сделать все совсем незаметно будет сложно - потому что активным будет не какое-то левое окно, а ваше, раз вы поверх него рисуете.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы