Скин с альфа-каналом (UpdateLayeredWindow_)
Вложений: 1
появившееся было желание писать на пурике моментально ударилось лицом о несговорчивость некоторых функций API. в частности UpdateLayeredWindow_(), которая должна была преобразовать полупрозрачный рисунок в многослойное окно (т.е. практически в шкурку с альфа-каналом).
в чем может быть дело? может, дело в win7? тогда, если не затруднит, кто-нибудь гляньте на другой винде и отпишитесь, не высветляется ли левый верхний угол иконки фотошопа? или, может, дело в чем-то другом? я понимаю, что есть прекрасная функция WinSkin(), но она не передает полутонов канала прозрачности. при низком разрешении экрана границы картинки выходят несколько угловатыми. исходники кода и скомпилированные экзешники в аттаче. (заменено на рабочий вариант) проблема решена, рабочий вариант с комментариями: |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
|
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
Цитата:
хотя бы экзешник запусти, скажи, как он себя ведет на другой винде. или у тебя тоже семерка? |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
Вложений: 1
Вот как он себя ведет. У меня семерка.
|
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
походу, дело в семерке. надо API покурить. эээх...
--- нда. там такое... как я понял, png нужно будет разбить на битмап и маску, потом объединить их снова, но как-то по хитрому, и только после этого вызывать построение слоистых окон. короче долго еще думать... |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
как бэ ура. победил я эту беду. надо было RGB предварительно с альфа-каналом смешать. винда сама этого делать не умеет почему-то.
одно неудобство - контролы теперь недоступны. нужно свои рисовать. зато шкурки теперь можно полупрозрачные делать. з.ы.: косячные архивы удаляю. исправленный и дополненный вариант см. в первом посте |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
У меня работает отлично
|
Re: Скин с альфа-каналом (UpdateLayeredWindow_)
Эта фраза очень насторожила:
Цитата:
Код:
EnableExplicit |
Ответ: Re: Скин с альфа-каналом (UpdateLayeredWindow_)
Цитата:
(хорошо, что я комментарии свои дурацкие забыл удалить в коде ..) а если так, то не попрет: Код:
DisplayPopupMenu(0, WindowID(hWnd)) |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
|
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
исправил ошибки, чуток оптимизировал, расставил комментарии.
закинул основную писанину в подключаемый модуль. можно включать его в проект и спокойно писать, скажем, приложения для десктопа. архив размещаю в первом посте. |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
Подскажите пожалуйста как добавить на это окно кнопку и вывести текст? Раньше учил VB, сейчас возникла необходимость написать утилиту изпользуя скин, пример хорошо демонстрирует как прикрутить скин, но как реализовать простейшие контролы не понятно. Буду рад любой помощи!
|
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
Цитата:
есть еще варианты, типа "создать еще одну форму с помощью WinSkin, накидав на нее контролы, таскать ее следом за нашим скином...", но это уже совсем клиника. вывод: данный вариант подходит для виджетов и прочей мелочевки. для работы со стандартными контролами - WinSkin. |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
Очень информативный пример, спасибо.
Только вот перемещение окна как-то странной сделано, более того, окно может "открепиться" от курсора в момент его перетаскивания. Лучше использовать эту WinAPI: Код:
SendMessage_(WindowID(hWnd), #WM_NCLBUTTONDOWN, #HTCAPTION, 0) |
Ответ: Скин с альфа-каналом (UpdateLayeredWindow_)
Цитата:
а у меня этот вариант вызывает утечки памяти - место занимаемое процессом в памяти растет при перетаскивании и не уменьшается. а мой работает без утечек и не отцепляясь. видимо, я тормоз и слишком медленно водил мышкой, вот и не отцепилась. можно и другие варианты поискать. |
Часовой пояс GMT +4, время: 00:57. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot