Рисовать на Рабочем столе (аккуратно рисовать)
Делаю маленькую прогу, которая по сути близка к прогам рисующем небольшие движущиеся модельки/картинки на рабочем столе(ну там, например кораблик вокруг курсора летает или скрепка из офиса).
Я пока делаю ее в таком ключе:
С помощью API BitBlt копирую BMP на DC рабочего стола, стираю, рисую в другом месте, но есть несколько сложностей при таком варианте. Прежде чем рисовать на новом месте, я сохраняю кусок рабочего стола (hBitDeskTop), потом рисую поверх свою BMP (hBitBMP), а когда хочу ее переместить - стираю свою BMP, загружая тот самый сохраненный кусок(hBitDeskTop), ну а дальше все повторяется для нового места расположения.
1. Если BMP долго висит на одном месте, то под ней уже могли появится новые окна (или исчезнуть), а в нашем (hBitDeskTop) хранится кусок рабочего стола 10 сек. давности, ну и сами понимаете, когда чтобы стереть BMP загружем hBitDeskTop, то на рабочем столе может оказаться кусок окна, которого уже нет, и будет там висеть пока какое-нибудь окно не перекроет его. - НЕХОРОШО.
Как же правильно рисовать на рабочем столе, чтобы никаких артефактов на нем не оставлять ???
Может как-нибудь заставить раб. стол со всеми открытыми на нем окнами в заданной области перерисоваться (и чтобы еще эта перерисовка не на экран пошла, а в hBitбуфер, на который мы еще сдвинутую hBitBMP наложим и за одную операцию наложим на раб. стол - чтобы мерцание убрать, когда рисунок движется или поворачивается).
Видится мне еще один вариант:
Можно сделать окно под "размер и форму" картинки и тогда проблемы перерисовки решаются горозда проше. Или чтобы окно было станд. прямоугольное, но прозрачное, кроме Image какое-нибудь на нем...
Помню я, что в старых версиях Office помощник сначала в таком маленьком окошке рисовался, и только позже эту рамку убрали/спрятали...Т.е. программисты Microsoft тоже небось в окне рисуют???
Кто знает, подскажите какой вариант избирают профессионалы... Заранее спасибо.
А если честно - не знаю. Но у многих экранных животных кусочки окна то тут, то там появляются... А еще я в 6-й Дельфе видал полупрозрачные и совсем прозрачные окна.
Профессионалов еще в школе учили, что рисовать в книжках и на столах - плохо.
А если честно - не знаю. Но у многих экранных животных кусочки окна то тут, то там появляются... А еще я в 6-й Дельфе видал полупрозрачные и совсем прозрачные окна.
Где-то видел, даже скачивал статью про это дело на VB. Стать найду - кину. Только анимацию надо делать хотя бы на C, а лучше на ASMе, тормозить будет. Смысл в том, что окно делается по форме рисунка, изменяет форму в соответсвии с изменением изображения.
Где-то видел, даже скачивал статью про это дело на VB. Стать найду - кину. Только анимацию надо делать хотя бы на C, а лучше на ASMе, тормозить будет. Смысл в том, что окно делается по форме рисунка, изменяет форму в соответсвии с изменением изображения.
Спасибо за ответы.
Анимация у меня планируется очень минимальная: появился, лениво подвигался вправо/влево, исчез, появился в другом месте и т.д. - это я простенький такой тир делаю.. :-)
По задание формы окна тоже видел статейки, правда форма задавалась при заргрузке раз и на всегда.
В одном журнале, то ли Chip, то ли еще где видел описание функции, которое создавало окно по форме BMP (с заданием прозрачного фона). Работала она по следующему принципу:
1. Создает регион из первого непрозрачного пикселя (типа того ~ API CreatRegion)
2. Потом пробегает по пиксельно по всей BMP, определяя цвет, прозрачный пиксель или нет..
3. Если пиксель непрозрачный, то используя функцию (типа ~ API AddRegion...) добавляем этот пиксель к нашему региону.
4. Т.о. создаем регион сложной конфигурации (прямо по контуру BMP), ну а дальше как в учебниках при создании окна, передаем этот регион и получаем нестандартное окно.
Вообщем, как только откапаю полное описание этой функции тут же опубликую.
Интересно правда как менять форму окно в процессе работы, так что если ты откапаешь, пиши... думаю всем будет интересно.
Спасибо за ответы.
Анимация у меня планируется очень минимальная: появился, лениво подвигался вправо/влево, исчез, появился в другом месте и т.д. - это я простенький такой тир делаю.. :-)
По задание формы окна тоже видел статейки, правда форма задавалась при заргрузке раз и на всегда.
В одном журнале, то ли Chip, то ли еще где видел описание функции, которое создавало окно по форме BMP (с заданием прозрачного фона). Работала она по следующему принципу:
1. Создает регион из первого непрозрачного пикселя (типа того ~ API CreatRegion)
2. Потом пробегает по пиксельно по всей BMP, определяя цвет, прозрачный пиксель или нет..
3. Если пиксель непрозрачный, то используя функцию (типа ~ API AddRegion...) добавляем этот пиксель к нашему региону.
4. Т.о. создаем регион сложной конфигурации (прямо по контуру BMP), ну а дальше как в учебниках при создании окна, передаем этот регион и получаем нестандартное окно.
Вообщем, как только откапаю полное описание этой функции тут же опубликую.
Интересно правда как менять форму окно в процессе работы, так что если ты откапаешь, пиши... думаю всем будет интересно.
Форма окна изменяется функцией SetWindowRegion, подробности в MSDN. Форма окна задается формой объекта Region, который в свою очередь можно легко создавать через объект Path контекста окна. То есть, создаем объект Path обыкновенными функциями рисования (CreatePath, EndPath, Line, Arc, Cyrcle??? и т.д.), преобразуем Path в Region (ConvertPathToRgn, кажется, можно уточнить), привязываем Region к окну.
Форма окна изменяется функцией SetWindowRegion, подробности в MSDN. Форма окна задается формой объекта Region, который в свою очередь можно легко создавать через объект Path контекста окна. То есть, создаем объект Path обыкновенными функциями рисования (CreatePath, EndPath, Line, Arc, Cyrcle??? и т.д.), преобразуем Path в Region (ConvertPathToRgn, кажется, можно уточнить), привязываем Region к окну.
Про Path ничего не слышал, интересно, посмотрим...
Про Path ничего не слышал, интересно, посмотрим...
Когда-то у меня была хорошая книга "VB 5.0 мастерская разработчика" c примерами на диске.
Диск нашел, а книгу нет. Посмотри в примере ANIMATION. Может пригодится. :cool:
Когда-то у меня была хорошая книга "VB 5.0 мастерская разработчика" c примерами на диске.
Диск нашел, а книгу нет. Посмотри в примере ANIMATION. Может пригодится. :cool:
Спасибо за файлы, посмотрел, не совсем конечно то, что я собираюсь делать, но кой чего интересного там есть.
В принципе, я уже определился как буду дальше делать свою прогу, по примеру: http://www.nkfi.ru/doc/mirror/infocity/infocity.kiev.ua/prog/basic/content/basic025.phtml-id=1173.htm
хочу еще добавить, чтобы прога в трее сидела, курсоры разные загружала, вообщем планов громодье, будем делать, если кому интересно будет, как что получится - выложу :-) ...