Форум: "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.037 c