Страницы

Поиск по вопросам

суббота, 29 декабря 2018 г.

Как сделать непрямоугольное окно?

Я видел приложения, окна которых имеют какую-то фантастическую форму.
Вопрос: как сделать окно произвольной формы в 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 на хрома-кей.

Комментариев нет:

Отправить комментарий