T_Volkova_81, сейчас поясню.
1. По определению - всё прозрачно, те чтобы было непрозрачно - надо туда это нарисовать.
2. Я накидаю быстро идею пвседокодом ок? если будет непонятно в деталях - разберёмся.
итак - я даю это без двойной буферизации (она нужна "чтоб не моргало") работать будет и так, а добавить её можно будет и потом
1 Объект типа СписокСлоёв - с набором необходимых ф-ций (как у всех списков - эт понятно) плюс ещё одна ф-я
СписокСлоёв::Draw(CDC *pDC)
{
цикл для каждого элемента
Слой *pLayer = GetNext();
конец цикла
}
2. Объект типа Слой (ну этот может содержать ещё и список объектов, но это не важно, будем считать что он рисует, в противном случае он так же в цикле вызывает ф-ю Draw(CDC *pDC) для объектов из своего списка)
Слой::Draw(CDC *pDC)
{
// Непосредственная отрисовка данных этого слоя
pDC->FillSolidRect ....
}
3. Теперь использование - например в диалоге
class CMyDlg : public CDialog
{
СписокСлоёв m_LLst;
};
void CMyDlg::OnPaint()
{
.....
CPaintDC dc(this);
CDC *pDC = &dc;
pDC->FillSolidRect() - рисуем фон
всё остальное рисуем поверх фона
m_LLst.Draw(pDC);
порядок объектов в списке соответствует обратному порядку слоёв - первый объект в списке=нижний слой и тд
И никаких бит-мапов и -блитов