Я видел приложения, окна которых имеют какую-то фантастическую форму.
Вопрос: как сделать окно произвольной формы в Windows 7 на Си?
Ответ
Я знаю такие способы:
С помощью функцииSetWindowRgn
Простой способ
Окно будет "прозрачным" для событий мыши, т.е. не будет реагировать на нажатия мыши в прозрачных областях
Не поддерживает альфа блендинг (края будут рваные)
С помощью расширенного стиля WS_EX_LAYERED
Поддерживает попиксельный альфа-блендинг или хромакей
Более сложен в использовании, если нужен попиксельный альфа-блендинг
При использовании WS_EX_LAYERED, прозрачные пиксели (хромакей) можно устанавливать так:
SetLayeredWindowAttributes(m_hWnd, RGB(R,G,B), 0, LWA_COLORKEY);
Естественно, по WM_PAINT вы должны заливать прозрачные области тем же цветом.
Если вам нужен попиксельный альфа-блендинг, окно нужно отрисовывать не по WM_PAINT, а особым методом с использованием функции UpdateLayeredWindow (пример). Но есть и подводные камни - по RDP окно отображаться не будет. В этом случае нужно делать fallback на хрома-кей.
Комментариев нет:
Отправить комментарий