Есть залитый градиентом диалог. Нужно нарисовать кнопку, которая прозрачна. Т.е на ней есть изображение, а фон прозрачный
Вот что мне удалось добиться
Создаем список изображения с маской....
MyButton::MyButton()
{
m_Bmp.LoadBitmap(IDB_BITMAP21);
m_Bmp2.LoadBitmap(IDB_BITMAP22);
imgList.Create( 32,
32,
ILC_COLOR24|ILC_MASK, 1, 0);
imgList.Add(&m_Bmp, RGB(255,255,255));
imgList.Add(&m_Bmp2, RGB(255,255,255));
}
Вот так рисуем на кнопке прозрачный битмап...
void MyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
if(GetDlgCtrlID()==IDC_BUTTON1)
{
CPoint pt( 0,0);
BOOL z=imgList.Draw(&dc, 0, pt, ILD_TRANSPARENT);
}
if(GetDlgCtrlID()==IDC_BUTTON2)
{
CPoint pt( 0,0);
BOOL z=imgList.Draw(&dc, 1, pt, ILD_TRANSPARENT);
}
////////////////////
dc.Detach();
}
Вот так рисуем битмапы на заголовке
BOOL CEliteDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,70,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
bmp2.GetBitmap(&bitmapinfo);
bmp3.GetBitmap(&bitmapinfo2);
int nOldStretchBltMode = pDC->SetStretchBltMode (COLORONCOLOR);
//Градиент разбиваем на две части,левая часть имеет картинки,и потому не должна растягиваться
pDC->BitBlt(0,0,bitmapinfo.bmWidth,bitmapinfo.bmHeight,&memDC1,0,0,SRCCOPY);
//Правая часть ресайзится.Вообщем на ней и есть кнопки, подкоторыми даже при растягивании
//должен корректно отображаться фон
pDC->StretchBlt(bitmapinfo.bmWidth,0,rect.right,bitmapinfo2.bmHeight,&memDC2,0,0,bitmapinfo2.bmWidth,bitmapinfo2.bmHeight,SRCCOPY);
pDC->SetStretchBltMode (nOldStretchBltMode);
return TRUE;
}
А вот пытаемся при перерисовке кнопок,поставить градиент
BOOL MyButton::OnEraseBkgnd(CDC* pDC)
{
CEliteDlg* pDlg = (CEliteDlg*)GetParent();
CRect rBtn; GetWindowRect(rBtn);
pDlg->ScreenToClient(rBtn);
CDC *d_dc=pDlg->GetDC();
pDC->BitBlt(0,0,rBtn.Width(),rBtn.Height(),d_dc,rBtn.left,rBtn.top,SRCCOPY);
// TODO: Add your message handler code here and/or call default
return TRUE;
}
И все равно есть глюки, то некорректно перерисовывается, то еще что-то.
Что посоветуете -или я не там копаю?
Вообще проблема не только в кнопке, а как научится делать дочернее окно прозрачным по отношению к родительскому фону..
Спасибо.