Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Рисовать на Рабочем столе (аккуратно рисовать)

258
04 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Занялся новым для себя делом и потому прошу опытных, оценить и подсказать верную дорогу на этом тернистом пути..
Делаю маленькую прогу, которая по сути близка к прогам рисующем небольшие движущиеся модельки/картинки на рабочем столе(ну там, например кораблик вокруг курсора летает или скрепка из офиса).
Я пока делаю ее в таком ключе:
С помощью API BitBlt копирую BMP на DC рабочего стола, стираю, рисую в другом месте, но есть несколько сложностей при таком варианте. Прежде чем рисовать на новом месте, я сохраняю кусок рабочего стола (hBitDeskTop), потом рисую поверх свою BMP (hBitBMP), а когда хочу ее переместить - стираю свою BMP, загружая тот самый сохраненный кусок(hBitDeskTop), ну а дальше все повторяется для нового места расположения.
1. Если BMP долго висит на одном месте, то под ней уже могли появится новые окна (или исчезнуть), а в нашем (hBitDeskTop) хранится кусок рабочего стола 10 сек. давности, ну и сами понимаете, когда чтобы стереть BMP загружем hBitDeskTop, то на рабочем столе может оказаться кусок окна, которого уже нет, и будет там висеть пока какое-нибудь окно не перекроет его. - НЕХОРОШО.
Как же правильно рисовать на рабочем столе, чтобы никаких артефактов на нем не оставлять ???
Может как-нибудь заставить раб. стол со всеми открытыми на нем окнами в заданной области перерисоваться (и чтобы еще эта перерисовка не на экран пошла, а в hBitбуфер, на который мы еще сдвинутую hBitBMP наложим и за одную операцию наложим на раб. стол - чтобы мерцание убрать, когда рисунок движется или поворачивается).

Видится мне еще один вариант:
Можно сделать окно под "размер и форму" картинки и тогда проблемы перерисовки решаются горозда проше. Или чтобы окно было станд. прямоугольное, но прозрачное, кроме Image какое-нибудь на нем...
Помню я, что в старых версиях Office помощник сначала в таком маленьком окошке рисовался, и только позже эту рамку убрали/спрятали...Т.е. программисты Microsoft тоже небось в окне рисуют???
Кто знает, подскажите какой вариант избирают профессионалы... Заранее спасибо.
267
04 апреля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Профессионалов еще в школе учили, что рисовать в книжках и на столах - плохо.

А если честно - не знаю. Но у многих экранных животных кусочки окна то тут, то там появляются... А еще я в 6-й Дельфе видал полупрозрачные и совсем прозрачные окна.
2.2K
07 апреля 2003 года
USA-Lesh
50 / / 02.04.2003
Цитата:
Originally posted by Cutty Sark
Профессионалов еще в школе учили, что рисовать в книжках и на столах - плохо.

А если честно - не знаю. Но у многих экранных животных кусочки окна то тут, то там появляются... А еще я в 6-й Дельфе видал полупрозрачные и совсем прозрачные окна.


Где-то видел, даже скачивал статью про это дело на VB. Стать найду - кину. Только анимацию надо делать хотя бы на C, а лучше на ASMе, тормозить будет. Смысл в том, что окно делается по форме рисунка, изменяет форму в соответсвии с изменением изображения.

258
07 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by USA-Lesh

Где-то видел, даже скачивал статью про это дело на VB. Стать найду - кину. Только анимацию надо делать хотя бы на C, а лучше на ASMе, тормозить будет. Смысл в том, что окно делается по форме рисунка, изменяет форму в соответсвии с изменением изображения.



Спасибо за ответы.
Анимация у меня планируется очень минимальная: появился, лениво подвигался вправо/влево, исчез, появился в другом месте и т.д. - это я простенький такой тир делаю.. :-)

По задание формы окна тоже видел статейки, правда форма задавалась при заргрузке раз и на всегда.

В одном журнале, то ли Chip, то ли еще где видел описание функции, которое создавало окно по форме BMP (с заданием прозрачного фона). Работала она по следующему принципу:
1. Создает регион из первого непрозрачного пикселя (типа того ~ API CreatRegion)
2. Потом пробегает по пиксельно по всей BMP, определяя цвет, прозрачный пиксель или нет..
3. Если пиксель непрозрачный, то используя функцию (типа ~ API AddRegion...) добавляем этот пиксель к нашему региону.
4. Т.о. создаем регион сложной конфигурации (прямо по контуру BMP), ну а дальше как в учебниках при создании окна, передаем этот регион и получаем нестандартное окно.

Вообщем, как только откапаю полное описание этой функции тут же опубликую.
Интересно правда как менять форму окно в процессе работы, так что если ты откапаешь, пиши... думаю всем будет интересно.

258
07 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Вот, нашел хорошо написаную статейку на эту тему:
http://www.nkfi.ru/doc/mirror/infocity/infocity.kiev.ua/prog/basic/content/basic025.phtml-id=1173.htm
2.2K
08 апреля 2003 года
USA-Lesh
50 / / 02.04.2003
Цитата:
Originally posted by SergeySV


Спасибо за ответы.
Анимация у меня планируется очень минимальная: появился, лениво подвигался вправо/влево, исчез, появился в другом месте и т.д. - это я простенький такой тир делаю.. :-)

По задание формы окна тоже видел статейки, правда форма задавалась при заргрузке раз и на всегда.

В одном журнале, то ли 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 к окну.

258
08 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by USA-Lesh

Форма окна изменяется функцией SetWindowRegion, подробности в MSDN. Форма окна задается формой объекта Region, который в свою очередь можно легко создавать через объект Path контекста окна. То есть, создаем объект Path обыкновенными функциями рисования (CreatePath, EndPath, Line, Arc, Cyrcle??? и т.д.), преобразуем Path в Region (ConvertPathToRgn, кажется, можно уточнить), привязываем Region к окну.



Про Path ничего не слышал, интересно, посмотрим...

459
09 апреля 2003 года
gacol
273 / / 12.02.2003
Цитата:
Originally posted by SergeySV


Про Path ничего не слышал, интересно, посмотрим...





Когда-то у меня была хорошая книга "VB 5.0 мастерская разработчика" c примерами на диске.
Диск нашел, а книгу нет. Посмотри в примере ANIMATION. Может пригодится. :cool:

258
09 апреля 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by gacol


Когда-то у меня была хорошая книга "VB 5.0 мастерская разработчика" c примерами на диске.
Диск нашел, а книгу нет. Посмотри в примере ANIMATION. Может пригодится. :cool:



Спасибо за файлы, посмотрел, не совсем конечно то, что я собираюсь делать, но кой чего интересного там есть.
В принципе, я уже определился как буду дальше делать свою прогу, по примеру: http://www.nkfi.ru/doc/mirror/infocity/infocity.kiev.ua/prog/basic/content/basic025.phtml-id=1173.htm
хочу еще добавить, чтобы прога в трее сидела, курсоры разные загружала, вообщем планов громодье, будем делать, если кому интересно будет, как что получится - выложу :-) ...

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог