Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 535
от 10.07.2008, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 336, Экспертов: 0
В номере:Вопросов: 1, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 139538: Вопрос: как реализовать несколько слоёв в окне? например сначала рисуешь на первом, потом создайшь ёщё один HDC, рисуешь на нём и рисуешь его поверх первого через BitBlt. Перепробовал разные способы, не получается =(...

Вопрос № 139.538
Вопрос:
как реализовать несколько слоёв в окне?
например сначала рисуешь на первом, потом создайшь ёщё один HDC,
рисуешь на нём и рисуешь его поверх первого через BitBlt.
Перепробовал разные способы, не получается =(

Приложение:

Отправлен: 08.06.2008, 14:29
Вопрос задал: Xeladen (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Xeladen!

Самый быстрый и простой способ, который приходит в голову - это иконки.
Иконки можно создавать любых размеров и рисуются они поверх друг друга с учётом прозрачных мест.

Иконка состоит из двух HBITMAP
1. Это сама картинка.
2. Маска вывода на экран.
Поэтому нужно создать HBITMAP для картинки, загрузить её через SelectObject в HDC нарисовать в неё, создать HBITMAP для маски, определить, какие точки будут прозрачными и "отметить" их в маске.
Потом на основе этих двух HBITMAP создать HICON (не забыть после этого удалить эти две HBITMAP-ы). И после этого созданную иконку можно рисовать в любом месте в любой последовательности.

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

Так же в примере используется внешний массив out для получения данных о картинке. Можно сделать проще и использовать уже готовую картинку HBITMAP, полученную другими способами, например из файла или через BitBlt.
Ещё важное замечение - массив out содержит данные по три байта на цвет. В примере при разборе эти данные складываются тройками со сдвигом.

Приложение:

Ответ отправил: Сандров Алекс (статус: 9-ый класс)
Ответ отправлен: 09.06.2008, 07:24

Отвечает: PavelGM
Здравствуйте, Xeladen!

Еще вариант - использование TransparentBlt вместо BitBlt - а все слои хранить в памяти и отрабатывать WM_PAINT.

Если же надо дать пользователю рисовать, то хорошо подходят прозрачные окна (стиль WS_EX_LAYERED и SetLayeredWindowAttributes(Handle, , 0, LWA_COLORKEY)), наложенные поверх. А параллельно отрисовывать в память, чтобы использовать TransparentBlt для интеграции по завершению работы или переходе к следущему слою.
Ответ отправил: PavelGM (статус: Студент)
Ответ отправлен: 09.06.2008, 10:33


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.99 RC 5.0 от 08.07.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное