Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Окно в форме картинки 
:(
    Опции темы
TGrey
Дата 3.12.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Добрый день, может кто может подсказать, я давно видел статью, как делать форму в виде картинки без использования Регионов. Там форма была в точности, как картинка с тенями и без квадратного очертания.
Может у кого есть код или доходчивая статья, за счет чего и как это делается?
Спасибо.
PM MAIL   Вверх
586
Дата 4.12.2010, 17:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Код
SetWindowLong(hWnd, GWL_EXSTYLE,
    GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);

SetLayeredWindowAttributes(hWnd,
    RGB(255, 0, 0), // цвет, который будет прозрачным - красный цвет
    0, LWA_COLORKEY);




Это сообщение отредактировал(а) 586 - 4.12.2010, 17:03
PM   Вверх
TGrey
Дата 4.12.2010, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Да я знаю на счет этой функции, но она делает полностью окно прозрачным вроде? Ну а если нарисовать картинку, а вокруг нее залить все прозрачным цветом, то останется рамка окна.
Я читал, что это как-то делается через ДИБ битмапы и PNG картинки, но я не нашел полного руководства, что к чему.
PM MAIL   Вверх
586
Дата 4.12.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(TGrey @  4.12.2010,  17:39 Найти цитируемый пост)
Ну а если нарисовать картинку, а вокруг нее залить все прозрачным цветом, то останется рамка окна.

Отключи стиль WS_CAPTION у окна, и добавь стиль WS_POPUP.
PM   Вверх
TGrey
Дата 4.12.2010, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Попробую.
Но вообще меня интересует вот такой результат.
http://www.codeproject.com/KB/GDI/pxalphablend/img2.gif
PM MAIL   Вверх
586
Дата 4.12.2010, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(TGrey @  4.12.2010,  19:13 Найти цитируемый пост)
Но вообще меня интересует вот такой результат.
http://www.codeproject.com/KB/GDI/pxalphablend/img2.gif 

Если ещё полупрозрачность нужна, тогда так:
Код
    SetWindowLong(hWnd, GWL_EXSTYLE,
        GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
    SetLayeredWindowAttributes(hWnd,
        RGB(0xFF, 0xFF, 0xFF), // цвет, который будет прозрачным - красный цвет
        130, LWA_COLORKEY | LWA_ALPHA);

PM   Вверх
TGrey
Дата 4.12.2010, 19:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



И что в картинке будет полупрозрачным?
PM MAIL   Вверх
586
Дата 4.12.2010, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(TGrey @  4.12.2010,  19:41 Найти цитируемый пост)
И что в картинке будет полупрозрачным? 

Вся картинка. А фон будет невидимым.
Вот так будет:

Присоединённый файл ( Кол-во скачиваний: 35 )
Присоединённый файл  image.PNG 45,38 Kb
PM   Вверх
TGrey
Дата 4.12.2010, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Да получилось, но что у меня, что у вас на скрине, видно, что очертание рисунка пострадало. А на том скрине, что я привел, там даже тени имеются от рисунка. Я вот о чем)
Хотя этот метод тоже возьму на заметку.
Есть еще идеи?)
PM MAIL   Вверх
586
Дата 4.12.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(TGrey @  4.12.2010,  20:04 Найти цитируемый пост)
Да получилось, но что у меня, что у вас на скрине, видно, что очертание рисунка пострадало.

Это просто края рисунка нужно подправить в фотошопе. А тень можно сделать, нарисовав в шахматном порядке серые пиксели в перемешку с прозрачными.
PM   Вверх
TGrey
Дата 4.12.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Да я думаю дело не в этом. Я как только картинку делаю БМП формата стразу теряются ее цвета и она становиться невзрачной. 
Вот нашел статью, где описывается работа с альфа-каналом
http://www.infocity.kiev.ua/graf/content/graf093.phtml
но там тоже ничего конкретного, все в общих чертах, а что для чего и как - умалчивается.
PM MAIL   Вверх
GremlinProg
Дата 6.12.2010, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(TGrey @  4.12.2010,  22:04 Найти цитируемый пост)
на скрине, видно, что очертание рисунка пострадало. А на том скрине, что я привел, там даже тени имеются от рисунка.

эту проблему немного обсуждали тут: http://forum.vingrad.ru/forum/topic-264876...258C/index.html

Добавлено через 5 минут и 53 секунды
кстати, загляни еще раз в RSDN, присмотрись к прозрачной картинке с текстом RSDN, видишь, шум есть даже там :))


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
TGrey
Дата 6.12.2010, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Да шум есть, но то обсуждения были для 98 винды) Может что изменилось. Та и вот в том скрине, что я привел первым, там все четко и красиво)
Но там я прочитал используется либа одна, чтобы открывать ПСП файлы ну и сам код тоже не документирован.

Нашел вот такую ссылочку
http://blog.duck17.net/post/Per-pixel-Alph...-Win32-API.aspx
но, я что-то не пойму, как делать БМП с альфа-каналом.
PM MAIL   Вверх
GremlinProg
Дата 7.12.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(TGrey @  6.12.2010,  18:02 Найти цитируемый пост)
Да шум есть, но то обсуждения были для 98 винды) Может что изменилось.

в 2009-м году 98 вендой,
я не настолько суров :))
Цитата(TGrey @  6.12.2010,  18:02 Найти цитируемый пост)
Та и вот в том скрине, что я привел первым, там все четко и красиво

ну я практически уверен, что тень там формируется одним растром, за счет градаций четвертой компоненты (альфа-канала),
а не полутонов с остальными тремя,

т.е. надо использовать UpdateLayeredWindow с ULW_ALPHA,
по ссылке кстати хороший пример, смотри функцию Paint

тут через временный HDC в UpdateLayeredWindow передается картинка с альфаканалом
и для нее устанавливаются атрибуты BLENDFUNCTION, аналогично как в функции AlphaBlend

альфаканал можно задать в PNG, любым соответствующим редактором,
либо в примере показан способ, как это сделать с обычным битмапом, испрльзуя фотошоп,
только вот чтобы его прочитать, придется использовать DIB'ы,
поэтому тут и стоит SetDIBitsToDevice, простой LoadImage будет игнорировать альфу,
хотя по идее там есть возможность задействовать DIB-секцию

Цитата(GremlinProg @  7.12.2010,  12:01 Найти цитируемый пост)
простой LoadImage будет игнорировать альфу

BitBlt, конечно же :))

Это сообщение отредактировал(а) GremlinProg - 11.1.2011, 09:39


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
TGrey
Дата 7.12.2010, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 1.12.2007

Репутация: 1
Всего: 1



Так, уточню. Тобишь PNG формат загрузится через LoadImage, или что PNG, что Битмап надо грузить через секции?
Кстати какой редактор то? МСПэинт подойдет? Или фотошоп? И как это хоть сделать)?
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0877 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.