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