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

Вниз

Как залить регион окна прозрачной кистью ?   Найти похожие ветки 

 
Skier ©   (2005-02-07 14:11) [0]

мои варианты :

1)
LOGBRUSH.lbStyle := BS_NULL;
ABrush := CreateBrushIndirect(LOGBRUSH);
SetBkMode(ABrush, TRANSPARENT);

2)
ABrush := GetStockObject(NULL_BRUSH);

а потом
ADC := GetWindowDC(Handle);
FillRgn(ADC, FExcludeRegion, ABrush);

FExcludeRegion - регион, который нужно залить, он уже создан здесь...

В чём ошибка ?


 
MBo ©   (2005-02-07 14:36) [1]

Заливка нулевой кистью, насколько я понимаю, равнозначна ничегонеделанию в обработчике WM_ERASEBKGND

в 1. - SetBkMode применяется к контексту, а не к кисти
в 2. - для чего получать контекст от окна, если, например, в BeginPaint он и так есть. Если случай нетривиальный, разъясни обстановку


 
Skier ©   (2005-02-07 14:56) [2]

>MBo ©   (07.02.05 14:36) [1]

> Если случай нетривиальный, разъясни обстановку

Я хочу окно разбить на две части :
первая часть ведёт себя как обычное окно, а во второй (верхней части) мне нужно просто выводить некий текст (caption), но так чтобы эта верхняя область не заливалась бы цветом фона...
(окно наследуется от TCustomPanel...)


> Заливка нулевой кистью, насколько я понимаю, равнозначна
> ничегонеделанию в обработчике WM_ERASEBKGND

Пробовал не помогает...


 
MBo ©   (2005-02-07 15:08) [3]

>окно наследуется от TCustomPanel
т.е. VCL-проект, не "чисто АПИ"?

>но так чтобы эта верхняя область не заливалась бы цветом фона...
хорошо бы поподробнее. Не уловил пока.

Область под текстом должна быть прозрачной до самого рабочего стола или как?


 
Skier ©   (2005-02-07 15:23) [4]

>MBo ©   (07.02.05 15:08) [3]

> т.е. VCL-проект, не "чисто АПИ"?

угу. VCL-проект.


> Область под текстом должна быть прозрачной до самого рабочего
> стола или как?

нет. не до рабочего стола...т.е. если мы "проносим" этот контрол над другим, у которого тот же родитель, но этот контрол должен
закрываться только текстом caption"а (т.е. текста в верхней области окна), а не всей областью, в которой этот caption рисуется...


 
MBo ©   (2005-02-07 16:57) [5]

Контролы с Transparent  работают так - из ControlStyle исключено cs_Opaque, при перерисовке вызывается InvalidateRect c флагом, приводящим к отмене вызова WM_ERASEBKGND.

Для текста с прозрачным фоном достаточно SetBkMode или Brush.Style:=bsClear, но при перемещении текста возникнут проблемы, связанные со стиранием старого текста - придется запоминать соотв. участок подложки.



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

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

Наверх





Память: 0.45 MB
Время: 0.038 c
3-1108827860
Sour
2005-02-19 18:44
2005.03.20
Service is currently busy: Display User


9-1103561248
йцукен
2004-12-20 19:47
2005.03.20
Поворот вектора.


6-1105480714
bulkas
2005-01-12 00:58
2005.03.20
Непрочитанные сообщения


3-1108805188
Bogdan
2005-02-19 12:26
2005.03.20
Как програмно вставить DBGrid?


1-1110036605
hamster
2005-03-05 18:30
2005.03.20
Вещественные числа





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский