Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Вниз

Прозрачный фон дочернего окна   Найти похожие ветки 

 
DVM ©   (2004-01-29 13:01) [0]

Добрый день/утро/вечер всем.

Вопросы я задаю только по большим праздникам, но вот возникла проблема, для которой никак не могу найти подходящее решение.
Суть в следующем:

Есть окно hWnd1, фон которого покрыт каким-либо узором (закрашен кистью или наложен битмап).
На нем лежит второе (дочернее) окно hWnd2, на которое накладывается скин-битмап (допустим в виде круглой, или другой формы кнопки). Отрисовать битмап с учетом прозрачного цвета я могу, так что рисунок имеет именно ту форму, что надо (например круг, вокруг которого прочвечивает фон окна hWnd2)

Проблема в том, что надо сделать так, чтобы при отрисовке фона окна hWnd2 рисовалось то, что под ним, т.е. родительское окно. Если этого не делать, то под моей круглой кнопкой отрисовывается прямоугольник той кистью, что задана для верхнего окна hWnd2. Круглой кнопки не получается.

Т.е при отрисовке фона верхнего окна, надо отрисовать то, что под ним. Отрисовать фон окна hWnd2 той же кистью, что задана для нижнего окна я не могу, т.к. узор не совпадет. Надо также обойтись без регионов.

Если непонятно объяснил - пример: Кнопка Пуск в XP при включенных темах имеет скругленную форму справа. Но само окно кнопки прямоугольное. Но в тех местах, где рисунок накладываемый на кнопку имеет прозрачные пиксели виден не фон кнопки, а фон родительского окна Shell_TrayWnd. Мне надо примерно то же.


 
MBo ©   (2004-01-29 13:20) [1]

Задается ли регион окна дочерней формы (SetWindowRgn)?


 
DVM ©   (2004-01-29 13:23) [2]


> Задается ли регион окна дочерней формы (SetWindowRgn)?

Нет мне надо обойтись без регионов. Потому как дочерним окном может быть, например, TabControl кнопки которого я отрисовываю сам, а в просвете между ними должен просвечивать фон родительского окна. Т.е. при перерисовке фона дочернего окна, надо отрисовать у него в качестве фона фон родительского.


 
MBo ©   (2004-01-29 13:31) [3]

WM_ERASEBKGND обрабатываешь?


 
DVM ©   (2004-01-29 13:39) [4]


> WM_ERASEBKGND обрабатываешь?

Понятное дело, что в обработчике WM_ERASEBKGND дочернего окна надо рисовать все необходимое. Так я и делал бы, если бы знал как получить ту часть фона родительского окна, которая скрыта дочерним контролом, я бы тогда ее и отрисовал в обработчике. Вопрос в том как получить. Если я просто возьму DC родительского окна и с пом. BitBlt отрисую нужный мне прямоугольник с родительского окна в фон дочернего будет ли это тем изображением, что скрыто дочерним окном.


 
Игорь Шевченко ©   (2004-01-29 14:22) [5]

DVM ©   (29.01.04 13:39)


> Если я просто возьму DC родительского окна и с пом. BitBlt
> отрисую нужный мне прямоугольник с родительского окна в
> фон дочернего будет ли это тем изображением, что скрыто
> дочерним окном.


Зависит от стиля WS_CLIPCHILDREN родительского окна


 
DVM ©   (2004-01-29 15:37) [6]


> Зависит от стиля WS_CLIPCHILDREN родительского окна

Точно!!! Как я сразу не вспомнил! У родительского окна есть этот стиль. Спасибо, дальше я разберусь.


 
Игорь Шевченко ©   (2004-01-29 16:38) [7]

А почему бы в сторону LayeredWindows не посмотреть ?


 
DVM ©   (2004-01-29 18:16) [8]


> А почему бы в сторону LayeredWindows не посмотреть ?

Я думал уже, но тогда придется забыть о win98. Не хотелось бы. Да собственно, я уже все сделал, просто убрав WS_CLIPCHILDREN.


 
pirat ©   (2004-02-09 01:21) [9]

Привет! Не могу пройти мимо такой интересной темы.
Я сделал все как написано выше про WS_CLIPCHILDREN (отключил его), TImage лежащий на форме через мой контрол замечательно просвечивается, кладу TButton - не просвечивается! Как будто нету там кнопки, видно только то, что под кнопкой... Как быть ? :(


 
DVM ©   (2004-02-09 19:03) [10]


> Как будто нету там кнопки, видно только то, что под кнопкой...
> Как быть ? :(


WS_CLIPCHILDREN означает, что область занимаемую дочерним контролом должен отрисовывать сам дочерний контрол. Если этого стиля нет, то родительское окно при стирании фона затрет изображение дочернего. Позаботиться о своевременном рисовании контрола должен сам программист.



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.04.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.05 c
14-1080225799
Отшельник
2004-03-25 17:43
2004.04.18
Книга Delphi и технология COM


1-1080727223
Виноградов Алексей
2004-03-31 14:00
2004.04.18
Моя консольная программа отображает русский текст иероглифами(+)


1-1080892571
alextov
2004-04-02 11:56
2004.04.18
Не получается создать потомка от TForm. Требует ресурсы


14-1079599373
Pitt
2004-03-18 11:42
2004.04.18
Помогите ламеру загрузить БД!


14-1080229573
TCrash
2004-03-25 18:46
2004.04.18
Реклама на сайтах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский