Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Прозрачность отдельных элементов окна


Автор: webgraf 26.10.2007, 14:22
Нужно реализовать следующий эффект:
В абсолютно прозрачном окне будет выводится список TextOut-ов (штук 10-20). 
При этом периодически отдельные TextOut-ы должны иногда плавно исчезать/появлятся(используя прозрачность). Посему прошу совета - как это реализовать? На ум приходит две идеи:
1. Сделать основное окно абсолютно прозрачным(LWA_COLORKEY например). А на него кидать AlphaBlend-ом TextOut-ы. Совершенно не представляю - будет ли это работать
2. Для каждого TextOut-а сделать свое, модальное например, окно и просто регулировать прозрачность(LWA_ALPHA) каждого.

Последний вариант удобен тем что легко будет отлавливать click-и на TextOut(а это надо будет делать..), но как эффективно это будет работать - пока не представляю, да и как сделать одновременно LWA_ALPHA и LWA_COLORKEY тоже понятия не имею(окошки должны быть без фона и прозрачные ведь..).

В общем если у кого есть задумка, ткните в нужно направлении. Спасибо ;)


Автор: Andrey44 26.10.2007, 15:32
http://forum.vingrad.ru/forum/topic-164440/hl/vista/index.html#st_15_view_0 посмотри.

Автор: webgraf 26.10.2007, 16:23
Цитата(Andrey44 @ 26.10.2007,  15:32)
http://forum.vingrad.ru/forum/topic-164440/hl/vista/index.html#st_15_view_0 посмотри.

А что там? Обычное полупрозрачное окно. LWA_ALPHA. Как мне это поможет?

Автор: Andrey44 26.10.2007, 16:49
Код

VOID Example_DrawString3(HDC hdc)
{
   Graphics graphics(hdc);

   // Create a string.
   WCHAR string[] = L"Sample Text";
   
   // Initialize arguments.
   Font myFont(L"Arial", 16);
   PointF origin(0.0f, 0.0f);
   SolidBrush blackBrush(Color(255, 0, 0, 0));
   StringFormat format;
   format.SetAlignment(StringAlignmentCenter);

   // Draw string.
   graphics.DrawString(
   string,
   11,
   &myFont,
   origin,
   &format,
   &blackBrush);
}



Тогда попробуй на прозрачном окне написать.

Автор: webgraf 26.10.2007, 17:53
MFC не использую ((.  Но даже если что на нем и писать - то оно тоже будет полупрозрачное.
А задача фактически - чтоб у разных элеметов на экране была разная прозрачность. Думаю все же попробовать поэксперементировать с окнами. Создать на полностью прозрачном окне другое прозрачное - с текстом. Только как вот этот текст потом заставить "затухать".  Фактически надо решить задачу одновременной прозрачности по одному цвету LWA_COLORKEY и прозрачности альфа-канала LWA_ALPHA. вот.

Автор: Andrey44 29.10.2007, 09:50
Ну во-первых это не MFC , а GDI+. smile 
А во-вторых, что-то я тебя не пойму - что именно ты хочешь сделать? smile 

Автор: webgraf 29.10.2007, 15:10
smile Попробую объяснить. Значит что должно получится в итоге: на рабочем столе должны плавно появляться и исчезать текстовые строки. Причем не одновременно все, а в разном порядке, с разными задержками показа итд...  Задачу я разделил на следующие:
1. Показать на экране только строки без содержимого окна. Это сделать легко - достаточно применить SetLayeredWindowAttributes с указанием прозрачного цвета окна.
2. Реализовать тот самый эффект исчезания строк. Причем поотдельности для каждой.

Вот над вторым пунктом я и бьюсь. Как сделать чтобы окно одновременно имело прозрачный цвет LWA_COLORKEY да еще и имело неполную прозрачность?
И как сделать это отдельно для каждой строки? Ну скажем для каждой строки можно открыть новое окошко и играться с его параметрами...

Автор: Andrey44 29.10.2007, 15:46
А почему-бы тогда тебе просто не писать на рабочем столе?
Задавая прозрачность прозрачность цвета строки.
И это без всяких окон smile 

Автор: webgraf 29.10.2007, 18:20
информация должна будет быть always on top. таким методом так получится?
да и в перспективе к этим строкам будут приделаны кнопки разные...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)