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.html

    Mein 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?


Anmelden zum Antworten