Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.87/30: Рейтинг темы: голосов - 30, средняя оценка - 4.87
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577

Контрол с прозрачностью и hwnd, hdc?

26.09.2013, 17:57. Показов 7828. Ответов 95
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Народ какой контрол можно использовать в качестве экрана и при этом он имел прозрачность наподобие label?
Знаю что label это не контрол и у него нет не hwnd, не hdc.
Хотел использовать Picturebox но его судя по темам в нэте прозрачным сделать нереально или же надо километровую портянку кода писать.
Если задать с помощью SetLayeredWindowAttributes форме цвет который она будет считать прозрачным
то контрол залитый этим цветом делает дырку сквозь форму..
На сам контрол же эта функция не действует.

И 2 вопрос, какой компонент можно использовать в качестве буфера для изображения наподобие Picturebox
но при этом не загружать его на форму и обращаться к его изображению по hdc?
Тоесть буфер.hdc пробовал Picturebox но если его не выводить на форму ругается на отсутствие with, set.

Не по теме:


Благодаря The trick открыл для себя api функцию AlphaBlend и увидел как много с помощью её можно делать
но мелкософтовцы и тут подлянку устроили не предоставив подходящего полигона для рисования....

0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.09.2013, 17:57
Ответы с готовыми решениями:

Подскажите - как переконвертировать gif с прозрачностью - в swf с прозрачностью
Всем привет. У меня есть gif с прозрачностью, после конвертации в swf - прозрачность исчезла. Подскажите - как переконвертировать...

Для чего служит первый параметр (HWND hWnd) в функции WndProc?
// функция обработки сообщений LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) Расшифруйте...

Окно на WinAPI, параметр функции WndProc (HWND hWnd,.)
Пытаюсь понять какое значение хранит первый параметр HWND hWnd в функции WndProc. В Windows в качестве окна может быть не только главное...

95
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
26.09.2013, 22:28
Студворк — интернет-сервис помощи студентам
Блин и не могли сделать что нибудь наподобие label только с hdc залазил на форум NET
так там вообще такие траблы со всем этим
Если только PictureBox'ы планируешь делать прозрачными, то можно просто отрисовывать картинку под формой на PictureBox через PaintPicture.

Не по теме:

На VB плотно программирую с 2010 года, для себя в основном :), в принципе здесь важно знать WinApi хорошо. Сам раньше занимался полупрозрачностью контролов и т.п., поэтому знаю как это делается.

0
 Аватар для fireday
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
27.09.2013, 03:26
google - SR2D
0
27.09.2013, 03:32

Не по теме:

fireday, Вы Правила форума не читали, похоже...

3.
.....
2.Не отсылайте других пользователей в поиск и избегайте ссылок на поисковые системы (Google, Yandex и др.). Самостоятельно найдите ответ на вопрос и разместите его на форуме.

1
 Аватар для fireday
307 / 138 / 6
Регистрация: 17.04.2013
Сообщений: 1,943
27.09.2013, 03:34
SoftIce, ты конечно молодец, но смысла этого делать нету, так как первая ссылка ведет на тему с подробным описанием SR2D
В двух словах это спрайтовый движок, который позволяет рисовать в hwnd с сохранением альфа канала
на нем основан мой плеер https://www.dropbox.com/sh/iqh... LRA7zYHOSK
// ссылку на описание плеера если кому надо дам в ЛС (так же могу заделиться модулем для SR2D для простого создания анимаций с сохранением альфа канала (т.е. прозрачности))

з.ы. с помощью SR2D можно сделать простенькие 2D игры
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
28.09.2013, 19:25  [ТС]
The trick, У тебя есть ещё какие нибудь константы прозрачности?
Наподобие
Visual Basic
1
2
3
4
5
6
7
8
Private Enum ConstantAlpha
    AB_32Bpp255 = 33488896
    AB_32Bpp128 = 25165824
    AB_32Bpp64 = 20971520
    AB_24Bpp255 = 16711680
    AB_24Bpp128 = 8388608
    AB_24Bpp64 = 4194304
End Enum
Рисую в формате .bmp 32 бита + альфа канал и столкнулся с тем что изображение в местах
перехода в прозрачность смешивает пиксели.
как должно быть справа, как выходит слева.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.09.2013, 19:35
The trick, У тебя есть ещё какие нибудь константы прозрачности?
Это структура BLENDFUNCTION упакованная в тип Long.
Рисую в формате .bmp 32 бита + альфа канал и столкнулся с тем что изображение в местах
Должен быть формат ABGR с по байту на каждый канал + он должен быть преведенным (premultiplied) т.е. каждый компонент уже должен быть помножен на значение альфа канала.
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
28.09.2013, 19:38  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Должен быть формат ABGR с по байту на каждый канал + он должен быть преведенным (premultiplied) т.е. каждый компонент уже должен быть помножен на значение альфа канала.
А есть проги которые сразу в этом формате рисуют?
Пробовал в фотошопе но он вообще такие чудеса выдаёт.
А так вообще рисую в программе для работы с иконками.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.09.2013, 20:00
Я сам себе писал утилитку для преобразования PNG в приведенный BMP с альфа каналом. Если надо могу выложить.
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
28.09.2013, 20:03  [ТС]
Непомешало бы
А то в фотошопе к примеру нашёл как делать так эт жесть)
Кликните здесь для просмотра всего текста

Сначала надо прозрачность слоя сохранить в альфа-канал: Ctrl+click на слое > Selection > Save selection. Затем избавиться от нее в самом слое: повторить 10 раз дублирование и слияние с нижележащим слоем - Ctrl+E > Ctrl+J. Затем слои сплющить (Flatten Image) и сохранять в BMP формат. В диалоге сохранения выбираете 32 bits и альфа будет в файле

Если не жалко то с исходником, хочу понять принцип.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
28.09.2013, 20:08
Сейчас приведу в нормальный вид, код старый
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
29.09.2013, 01:02  [ТС]
Перелопатив кучу информации как я понял альфа канал надо сохранять в отдельном файле
а потом уже в самой программе объединять иначе если сразу создать нужный формат
то LoadPicture выдаст ошибку.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
29.09.2013, 03:14
Лучший ответ Сообщение было отмечено The trick как решение

Решение

Цитата Сообщение от radlif Посмотреть сообщение
Перелопатив кучу информации как я понял альфа канал надо сохранять в отдельном файле
а потом уже в самой программе объединять иначе если сразу создать нужный формат
то LoadPicture выдаст ошибку.
Зачем? Загружаешь с альфа каналом, потом просто каждую компоненту, кроме альфа канала умножаешь на Альфа/255. Как и обещал скидываю утилитку с исходниками, изначально она предназначалась для создания иконок нескольких состояний, если открывать по одной, то можно как конвертер использовать.
Миниатюры
Контрол с прозрачностью и hwnd, hdc?  
Вложения
Тип файла: rar Png2Bmp.rar (34.3 Кб, 77 просмотров)
3
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
29.09.2013, 15:06  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Зачем? Загружаешь с альфа каналом, потом просто каждую компоненту, кроме альфа канала умножаешь на Альфа/255.
Я просто читал про это на rsdn, что мол не 1 редактор не поддерживает создание
изображений bmp для AlphaBlend, кроме того vb не загружает изображения
конвертированные в данный формат.
Поэтому приходится основное изображение и альфаканал загружать отдельно
и в самой программе объединять с помощью CreateDIBSection.
А так за утилитку огромное спасибо, я так вчера начал уже изучать CreateDIBSection
и BITMAPINFO со всеми прилагающимися
Небольшой вопрос, как сделать что то наподобие массива hdc или как правильно организовать
чтоб на 1 портянке была куча изображений, но я загружал в AlphaBlend ток нужное указывая координаты и размер?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
AlphaBlend(
  HDC hdcDest,                 // дескриптор целевого DC
  int nXOriginDest,            // x-коорд. левого верхнего угла
  int nYOriginDest,            // y-коорд. левого верхнего угла
  int nWidthDest,              // ширина целевого прямоугольника
  int nHeightDest,             // высота целевого прямоугольника
  HDC hdcSrc,                  // дескриптор источникового DC
  int nXOriginSrc,             // x-коорд. левого верхнего угла
  int nYOriginSrc,             // y-коорд. левого верхнего угла
  int nWidthSrc,               // ширина источникового прямоугольника
  int nHeightSrc,              // высота источникового прямоугольника
  BLENDFUNCTION blendFunction  // функция α - перехода
)
Почему то если выставить любое значение nXOriginSrc, и nYOriginSrc отличное от 0 то изображение вообще пропадает.

Добавлено через 2 часа 20 минут
Разобрался, но сейчас чутка другая проблема как быть с Autoredraw?))
Не прикольно так, свернул прогу развернул а там нет нечего))
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
29.09.2013, 17:42
Цитата Сообщение от radlif Посмотреть сообщение
Разобрался, но сейчас чутка другая проблема как быть с Autoredraw?))
Выставляй в True, не забывай потом просто Refresh вызывать.
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
29.09.2013, 17:49  [ТС]
Не прокатывает. Уже была такая идея.
Сейчас думаю с помощью AlphaBlend в другое виртуальное устройство перегонять, а от туда в
StdPicture, после в простой Image попробовать загнать.
Но вот как из hdc в StdPicture перегнать не могу найти.
Нашёл ток функцию CreateCompatibleBitmap.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
29.09.2013, 17:52
Цитата Сообщение от radlif Посмотреть сообщение
Не прокатывает.
Прокатывает, уж поверь.
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
29.09.2013, 17:59  [ТС]
Visual Basic
1
2
3
4
5
6
7
Private Sub Command1_Click()
    Set Img = LoadPicture(App.Path & "\44.bmp")
    DC = CreateCompatibleDC(pic.hDC)
    oBmp = SelectObject(DC, Img.Handle)
    AlphaBlend pic.hDC, 0, 0, 100, 40, DC, 0, 80, 100, 40, AB_32Bpp255
    pic.Refresh
End Sub
Оно даже не мигает, а когда Autoredraw = False нормально появляется

Добавлено через 1 минуту
Refresh сам стирает изображение.
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
29.09.2013, 18:03
Цитата Сообщение от radlif Посмотреть сообщение
Refresh сам стирает изображение.
Ты Autoredraw у pic'а поставь. И SelectObject DC,oBmp надо вызывать
0
 Аватар для radlif
44 / 44 / 3
Регистрация: 18.12.2011
Сообщений: 577
29.09.2013, 18:08  [ТС]
Нет не хочет не как
Я уже часов 6 с этим бьюсь...
0
Модератор
10068 / 3913 / 886
Регистрация: 22.02.2013
Сообщений: 5,863
Записей в блоге: 79
29.09.2013, 18:18
Держи
Вложения
Тип файла: rar Новая папка.rar (153.7 Кб, 29 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2013, 18:18

Почему переменная HWND hwnd объявлена дважды?
Один раз в функции WinMain: int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND...

Найти HWND окна, зная HWND окна, породившего его
Здравствуйте! Имеется основное окно "А". Это окно создаёт новое недочернее окно "Б". Необходимо найти HWND окна "Б",...

Двигаю контрол мышкой по форме Access, но контрол движется медленнее мышки
сабж. код прилагаю. нид хелп Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINTAPI) As Boolean ...

Как можно изменить слой, на котором находится контрол? Чтобы один контрол всегда рисовался поверх другого?
Просто я создаю контролы динамически, и при появлении они всегда ниже созданных ранее, это проблема. Заранее спасибо!

HWND hwnd- получение...
Кто - нибудь знеет функцию получения указателя на окно HWND?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru