Возможно ли создать маску для рабочего стола при работе приложения в окне?
Здравствуйте!
Извиняюсь за возможно идиотский вопрос. На данный момент только начал изучение C++. Работаю исключительно в консольной среде. Исчерпывающую информацию для начинающих получаю в достаточном количестве, но некоторые вещи, которые меня интересуют находятся пока за пределами моего понимания. И очень хотелось бы получить больше направление или примеры, чем конкретные ответы (хотя от последних я тоже не откажусь).
Интересует возможность создания не интерактивной (до определенного момента) маски для рабочего стола. В перспективе хочется сначала написать обычную текстовую игру не большого размера и продолжительности в консоли, при этом задействовав всю остальную область экрана в нужный момент. Вывести в эту область локализированные изображения, 2D анимацию и в целом завершить приложение этим действом, с возможностью вывода так же и звука.
Это возможно при использовании консоли или нужно создать классическое приложение для Windows, имитировать в нём консоль и уже потом вводить все нужные функции? И есть ли примеры, которые не имитируют окно, при этом находясь в полной развёртке, а именно задействуют рабочий стол или вообще всё что выведено на экран за пределами активного окна?
В дальнейшем воздержусь от подобных вопросов, стараясь конкретизировать больше, но пока на подъеме желания решил уточнить эту возможность.
Wataru, скрытое поле на которое в нужный момент будет выводиться информация игнорирующая все открытые за консолью окна т.е. выводиться поверх окон. При этом в неактивном состоянии при нажатии допустим мышкой на это поле в процессе игры ты просто переходишь на окно позади. Словно ничего не происходит. За счёт этого хочу добиться эффекта неожиданности происходящего.
Вам нужно создать прозрачное окно и рисовать в него то, что идет поверх рабочего стола (гуглите "winapi draw in transparent window").
Чтобы не рисовать поверх каких-то окон - надо в каком-то битмапе нарисовать черным цветом силуэты всех этих окон (надо все окна в системе перебрать - тут вам помогут всякие всякие GetWindowRect, EnumWindows, IsWindowVisible.). И при проприсовке надо этот битмап брать как маску (гуглите "winapi clip region").
Сообщения о кликах мышкой надо аккуратно передавать в окно, которое открыто по данным координатам. Сделать все совсем незаметно будет сложно - потому что активным будет не какое-то левое окно, а ваше, раз вы поверх него рисуете.