Як залити регіон вікна прозорим пензлем

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

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

FExcludeRegion – регіон, який потрібно залити, він уже створений тут.

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

в 1. - SetBkMode застосовується до контексту, а не до кисті в 2. - для чого отримувати контекст від вікна, якщо, наприклад, у BeginPaint він і так є. Якщо випадок нетривіальний, роз'ясни обстановку

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

>вікно успадковується від TCustomPanel тобто. VCL-проект, не "чисто АПІ"?

>але так щоб ця верхня область не заливалася б кольором тла. добре докладніше. Не вловив поки що.

Область під текстом має бути прозорою до робочого столу чи як?

> Область під текстом має бути прозорою до робочого > столу чи як?ні. не до робочого столу. тобто. якщо ми "проносимо" цей контрол над іншим, у якого той же батько, але цей контрол повинен закриватися тільки текстом caption"а (тобто тексту у верхній області вікна), а не всією областю, в якій цей caption малюється.

Контроли з Transparent працюють так - з ControlStyle виключено cs_Opaque, при перемальовуванні викликається InvalidateRect з прапором, що призводить до скасування виклику WM_ERASEBKGND.