Страница 1 из 2
Полупрозрачность фона
Добавлено: 03 Январь 2011, 23:38
muskin
Ver 6.0(ABC)
Приветствую всех членов CLAнклава.
Вопрос к мэтрам Clariona -как можно сделать любое вызываемое окно (Browse или Form) непрозрачным к остальному полупрозрачному фону, по аналогии с просмотрщиком графических файлов Picasa от Google, т.е. появляется форма ввода или список на переднем плане, а остальное на заднем фоне в полупрозразчном виде (концентрация внимания и отличная визуализация)? - Программа преобрела бы совсем другой статус.
Дайте нужное направление для dribblinga.
Re: Полупрозрачность фона
Добавлено: 04 Январь 2011, 13:07
StillZero
Не совсем понятно... не видел я пикасу... не скажу точно, надо пробывать, с первого взгляда должно получиться... но есть над чем подумать, а функции там две всего вроде...
The SetLayeredWindowAttributes function sets the opacity and transparency color key of a layered window.
Syntax
BOOL SetLayeredWindowAttributes( HWND hwnd,
COLORREF crKey,
BYTE bAlpha,
DWORD dwFlags
);
Parameters
hwnd
[in] Handle to the layered window. A layered window is created by specifying WS_EX_LAYERED when creating the window with the CreateWindowEx function or by setting WS_EX_LAYERED via SetWindowLong after the window has been created.
crKey
[in] COLORREF structure that specifies the transparency color key to be used when composing the layered window. All pixels painted by the window in this color will be transparent. To generate a COLORREF, use the RGB macro.
bAlpha
[in] Alpha value used to describe the opacity of the layered window. Similar to the SourceConstantAlpha member of the BLENDFUNCTION structure. When bAlpha is 0, the window is completely transparent. When bAlpha is 255, the window is opaque.
dwFlags
[in] Specifies an action to take. This parameter can be one or more of the following values.
LWA_COLORKEY
Use crKey as the transparency color.
LWA_ALPHA
Use bAlpha to determine the opacity of the layered window.
Return Value
If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.
Re: Полупрозрачность фона
Добавлено: 05 Январь 2011, 15:06
Admin
SetLayeredWindowAttributes делает прозрачным окно а не весь фон (AppFrame) программы под окном...
Так что не совсем то.
Re: Полупрозрачность фона
Добавлено: 07 Январь 2011, 22:07
muskin
Admin все понял, смотрел я все эти функции в Visual Studio, но ни одна не подходит - а если какой-то handle рабочего стола вместе с открытыми окнами?
Re: Полупрозрачность фона
Добавлено: 08 Январь 2011, 14:47
StillZero
картинку давай...
хэндл окна рабочего стола есть, и окна открытые можно все перечислить...
Код: Выделить всё
HWND GetDesktopWindow(VOID);
BOOL EnumChildWindows(
HWND hWndParent,
WNDENUMPROC lpEnumFunc,
LPARAM lParam
);
... и сделайте все окна полупрозрачными, а активное не делайте...
зы
попробовал... какая то херня с дочерними окнами, впрочем как обычно

а с SDI все ок
Re: Полупрозрачность фона
Добавлено: 08 Январь 2011, 21:45
muskin
А какая нужна картинка?
Re: Полупрозрачность фона
Добавлено: 09 Январь 2011, 4:43
StillZero
muskin писал(а):А какая нужна картинка?
как оно выглядит
Re: Полупрозрачность фона
Добавлено: 09 Январь 2011, 23:24
muskin
Re: Полупрозрачность фона
Добавлено: 10 Январь 2011, 15:33
StillZero
совсем не так представлял... по взрослому, полагаю, никто не сделает ибо
http://rsdn.ru/forum/usability/3324030.aspx
приколхозить фичу ... хз...
Re: Полупрозрачность фона
Добавлено: 11 Январь 2011, 7:47
StillZero
вопрос еще возник... приложение, стартануто два дочерних окна, переключаемся по Ctrl+F6 между ними... какое должно быть поведение?
а то мне тут со стороны говорят, что так делают для модального окна, то бишь для одного... а для модального одного можно конечно реализовать
Re: Полупрозрачность фона
Добавлено: 12 Январь 2011, 23:27
muskin
Поведение такое -> активное окно - непрозрачное, все остальное - полупрозрачный фон.
Я тут прикинул, хотя бы реализовать все это в рамках AppFrame. Наверное проще, не замахиваться на весь DeskTop.
Перед открытием, например, Form-ы, открываю фиктивное пустое Child-окно размером на весь AppFrame:
W_Window WINDOW,AT(,,800,600),CENTER,NOFRAME,MDI
END
Затем вдогонку к открытому фиктивному окну пытаюсь применить SetLayeredWindowAttributes - никакого эффекта, фон остается по умолчанию(наверное, неправильно описал прототип функции).
Затем открываю саму форму. Все срабатывает - на сплошном белом фоне нужная форма, все остальные открытые окна - за ним.
Помогите правильно описать прототип вызываемой функции.
Re: Полупрозрачность фона
Добавлено: 13 Январь 2011, 1:58
StillZero
да все верно... почти
вот у тебя две формы открыты одновременно, как тогда быть с "фиктивным пустым окном"? их ведь тоже два...одно то окно по сути надо убрать, оно уже не нужно, а дальше вопрос встает про переключение между этими окнами...
и дело не в прототипе скорее всего... попробуй сделать на окне без атрибута MDI...
Re: Полупрозрачность фона
Добавлено: 13 Январь 2011, 5:20
Admin
muskin писал(а):Помогите правильно описать прототип вызываемой функции.
Смотрим прикрепленный файл
Re: Полупрозрачность фона
Добавлено: 17 Январь 2011, 0:31
muskin
Спасибо Admin-у за шаблон.
Из шаблона взял все, что мне нужно, НО... с окнами MDI все эти Microsoft-овские штуки не работают (указано даже в шаблоне).
Любой тип окна, исключая MDI, - все нормально, и прозрачность, какую задал, и плавные открытия и закрытия как у Picasa, - одним словом - то, что хотел.
Но вот MDI? Не пойму, а чем эти окна с точки зрения транспарентности отличаюся от других?
А дальше бы плясал от координат всех открытых окон, координат клика мышки и от фокусов окон.
Проштудировал весь Help VStudio-2008, но на счет связи Child-окон и функции SetLayeredWindowAttributes не нашел ответа. А может я невнимателен.
Спасибо за советы и поддержку от StillZero и Admin-а.
И еще.
Наверняка Admin просмотрит этот ответ. Не хочу открывать новую тему по пустяковому вопросу, но если Admin сможет ответить на вопрос и сказать как -"я могу скачать весь форум и просматривать его в off-line (у меня коммутируемое соединение через модем, но у брата могу скачать любое кол-во Гигабайт)" - я был бы ему благодарен.
Re: Полупрозрачность фона
Добавлено: 17 Январь 2011, 4:46
Admin
muskin писал(а):Наверняка Admin просмотрит этот ответ. Не хочу открывать новую тему по пустяковому вопросу, но если Admin сможет ответить на вопрос и сказать как -"я могу скачать весь форум и просматривать его в off-line (у меня коммутируемое соединение через модем, но у брата могу скачать любое кол-во Гигабайт)" - я был бы ему благодарен.
Смотрим в сторону программ типа
Teleport или
Offline Browser