Entry tags:
Прозрачные окна
Хе-хе... долго ковырялся, как сделать частично прозрачное окно типа "Ассистента" у Microsoft Word или скругленных уголков у окна WinAmp. Ковыряния увенчались успехом, так что, если кому надо, делюсь фишкой.
0. Создаем окно WS_POPUP (только этот стиль, больше ничего)
1. Создаем пустой HRGN - CreateRectRgn(0, 0, 0, 0)
2. Добавляем туда (через CombineRgn) все области, которые НЕ должны быть прозрачными. В моем случае это все child-окна, но не само parent-окно.
3. Вызываем SetWindowRgn для этого окна и суммарного HRGN (важно: суммарный HRGN после этого не удаляем)
4. Только после этого делаем окно видимым - через ShowWindow(...SW_SHOWNOACTIVATE)
Роботаед *hop* *hop* :)
0. Создаем окно WS_POPUP (только этот стиль, больше ничего)
1. Создаем пустой HRGN - CreateRectRgn(0, 0, 0, 0)
2. Добавляем туда (через CombineRgn) все области, которые НЕ должны быть прозрачными. В моем случае это все child-окна, но не само parent-окно.
3. Вызываем SetWindowRgn для этого окна и суммарного HRGN (важно: суммарный HRGN после этого не удаляем)
4. Только после этого делаем окно видимым - через ShowWindow(...SW_SHOWNOACTIVATE)
Роботаед *hop* *hop* :)
no subject
no subject
no subject
а так — точно то. у тебя 0xffffff цветов, йоба — тебе жалко один на прозрачность отдать? заодно и альфу можно указывать, это гломурно. а если окно постоянно меняет форму (Miner Willy марширует, ага), то с регионами задолбаешься.
а пробовать там нечего — там сесть и написать. %-) у меня где-то на Delphi (ненене, без VCL, WinAPI %-) ещё валяются несколько самопальных скринмэйтов с этой фигнёй.
no subject
а вот неопреденной формы спрайты - да, с теми так проще.
С альфой я в другом месте игралси...
no subject
no subject
no subject
no subject
рисуется без проблем и глюков. причем, я использовал сразу и LWA_ALPHA, и LWA_COLORKEY. окно довольно навороченное - там и owner-draw контролы, и стандартные и с суперклассингом. непрозрачным получается только меню (тоже ownerdraw) - остальное все как надо.
зато глючит мыша: при установке цвета прозрачности можно "кликать" на все объекты, которые "просвечивают" насквозь. в то же время отловить наведение мыши на такие объекты - дело проблематичное...
ну типа там наведение мыши на кнопку - кнопка анимируется. а теперь кнопка под прозрачным окном - и не анимируется, т.к. окну невдомёк что на него навели :) то есть WM_MOUSELEFTDOWN пробивает насквозь, а WM_MOUSEMOVE - нет.
no subject
сделай окно WS_EX_TRANSPARENT, тогда, по-моему, вообще все события будут «насквозь» идти. не то, что надо, но тоже забавно.
no subject
no subject
no subject
no subject
no subject
no subject