Transparentes Bitmap wird nicht transparent!
-
Ich habe von folgendem Thread meine Funktion geschrieben:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-1309-and-highlight-is-transparent.htmlMein Ziel ist 2 Logos transparent zu machen.
Ich habe folgendes in die Funktion OnPaint eingefügt:CPaintDC dc(this); // Gerätekontext zum Zeichnen if (IsIconic()) { SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // Symbol in Clientrechteck zentrieren int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Symbol zeichnen dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } CBitmap Logo; Logo.LoadBitmap(IDB_LOGO); Logos(&dc, &Logo);Die Funktion vom oben genannten Thread schaut so aus:
void CQPMDlg::Logos(CDC *pDC, CBitmap* BitmaptoDraw) { // verursacht einen Fehler! (m_bBitmapLoaded wurde nicht gefunden) // Ist das Bitmap geladen ??? /* if(this->m_bBitmapLoaded != TRUE) { return; } */ CRect rc; GetClientRect(rc); COLORREF crOldBack = pDC->SetBkColor( RGB(255, 255, 255)); COLORREF crOldText = pDC->SetTextColor( RGB(0, 0, 0)); CDC dcImage, dcTrans; // Zwei Speicher Geräte Kontext für das Bild und die Maske dcImage.CreateCompatibleDC( pDC ); dcTrans.CreateCompatibleDC( pDC ); CBitmap *pOldBitmapImage; pOldBitmapImage = dcImage.SelectObject(BitmaptoDraw); // Erstellen einer Bitmapmaske CBitmap bitmapTrans; int nWidth = rc.Width(); int nHeight = rc.Height(); // Erstellen einer Monochrombitmaps bitmapTrans.CreateBitmap( nWidth, nHeight, 1, 1, NULL); CBitmap *pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans); dcImage.SetBkColor(RGB(0, 0, 0)); dcTrans.BitBlt( 0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCCOPY); pDC->BitBlt( 0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); pDC->BitBlt( 0, 0, nWidth, nHeight, &dcTrans, 0, 0, SRCAND); pDC->BitBlt( 0, 0, nWidth, nHeight, &dcImage, 0, 0, SRCINVERT); dcImage.SelectObject(pOldBitmapImage); dcTrans.SelectObject(pOldBitmapTrans); pDC->SetBkColor(crOldBack); pDC->SetTextColor(crOldText); }Nun mein Problem:
Das Bitmap ist nicht transparent! Dafür ist der Hintergrund des Dialoges schwarz!Kann mir jemand sagen, was ich falsch mache?