YungMakko | xilebo a écrit a écrit :
Up y a personne qui sait faire ca
|
Voici du code extrait de mes libs, je te laisse faire le menage, il doit y avoir tout ce qu'il faut... tu peux même surment améliorer le tout...
Code :
- // Charger le bitmap
- BOOL bRet = TRUE;
- HINSTANCE hResource = AfxFindResourceHandle(MAKEINTRESOURCE(nIDResource),RT_BITMAP);
- ASSERT(hResource);
- // Load the bitmap, and create a DIB section
- HBITMAP hBmp =
- (HBITMAP)::LoadImage( hResource,
- MAKEINTRESOURCE(nIDResource),IMAGE_BITMAP,0,0,
- LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
- if( hBmp == NULL )
- return FALSE; // Cannot load the bitmap
- if(!Attach( hBmp ))
- return FALSE;
- // Retrieve bitmap size
- BITMAP bitmapData;
- GetBitmap(&bitmapData);
- m_sizeBitmap.cx = bitmapData.bmWidth;
- m_sizeBitmap.cy = bitmapData.bmHeight;
- // Ensuite dessiner le bitmap
- // crColour est la couleur a utiliser pour la transparance
- BOOL CGBitmap::DrawTransparent(CDC * pDC, int x, int y, COLORREF crColour)
- {
- // Make sure to have called LoadBitmap() before to use this function
- ASSERT(GetSafeHandle());
- COLORREF crOldBack = pDC->SetBkColor(RGB(255,255,255));
- COLORREF crOldText = pDC->SetTextColor(RGB(0,0,0));
- CDC dcImage, dcTrans;
- BOOL bResult;
- CBitmap* pOldBitmapTrans;
- // Create two memory dcs for the image and the mask
- dcImage.CreateCompatibleDC(pDC);
- dcTrans.CreateCompatibleDC(pDC);
- // Select the image into the appropriate dc
- CBitmap* pOldBitmapImage = dcImage.SelectObject(this);
- // Create the mask bitmap
- CBitmap bitmapTrans;
- bResult = bitmapTrans.CreateBitmap(m_sizeBitmap.cx, m_sizeBitmap.cy, 1, 1, NULL);
- if(bResult)
- {
- // Select the mask bitmap into the appropriate dc
- pOldBitmapTrans = dcTrans.SelectObject(&bitmapTrans);
- // Build mask based on transparent colour
- dcImage.SetBkColor(crColour);
- bResult = dcTrans.BitBlt(0, 0, m_sizeBitmap.cx, m_sizeBitmap.cy, &dcImage, 0, 0, SRCCOPY);
- // Do the work - True Mask method - cool if not actual display
- if(bResult)
- bResult = pDC->BitBlt(x, y, m_sizeBitmap.cx, m_sizeBitmap.cy, &dcImage, 0, 0, SRCINVERT);
- if(bResult)
- bResult = pDC->BitBlt(x, y, m_sizeBitmap.cx, m_sizeBitmap.cy, &dcTrans, 0, 0, SRCAND);
- if(bResult)
- bResult = pDC->BitBlt(x, y, m_sizeBitmap.cx, m_sizeBitmap.cy, &dcImage, 0, 0, SRCINVERT);
- }
- // Restore settings
- dcImage.SelectObject(pOldBitmapImage);
- dcTrans.SelectObject(pOldBitmapTrans);
- pDC->SetBkColor(crOldBack);
- pDC->SetTextColor(crOldText);
- bitmapTrans.DeleteObject();
- return bResult;
- }
|
J'utilise ces functions depuis des années pour afficher des icones dans des boites de dialogue ou le fond est un bitmap (marbre ou autre motif). ça marche nickel.
Tu peux surment simplifier le code sous Windows, car ce code ci est fait egalement pour tourner sous UNIX (SUN Solaris) via des outils de portages spécifiques, donc le chargement du bitmap doit etre fait de cette manière; mais sous Windows, je crois que tu n'as pas besoin de tout ce bazard... Message édité par YungMakko le 18-11-2002 à 16:33:39 ---------------
In tartiflette, we trust!
|