1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
int width = GetDeviceCaps(hdc, HORZRES);
int height = GetDeviceCaps(hdc, VERTRES);
CBitmap bitmap;
CDC memDC;
CDC * dc = CDC::FromHandle(hdc); // comme j'ai déjà mon DC, j'utilise FromHandle
memDC.CreateCompatibleDC(dc);
bitmap.CreateCompatibleBitmap(dc, width, height);
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
if (!memDC.BitBlt(0, 0, width,height, dc, 0, 0, SRCCOPY))
MessageBox(NULL, "Erreur", "", 0);
// Create logical palette if device support a palette
// Là, en l'occurence, j'y passe pas, il supporte pas
CPalette pal;
if( dc->GetDeviceCaps(RASTERCAPS) & RC_PALETTE )
{
UINT nSize = sizeof(LOGPALETTE) + (sizeof(PALETTEENTRY) * 256);
LOGPALETTE *pLP = (LOGPALETTE *) new BYTE[nSize];
pLP->palVersion = 0x300;
pLP->palNumEntries = GetSystemPaletteEntries( dc->m_hDC, 0, 255, pLP->palPalEntry );
// Create the palette
pal.CreatePalette( pLP );
delete[] pLP;
}
memDC.SelectObject(pOldBitmap);
HANDLE hDIB = DDBToDIB( bitmap, BI_RGB, &pal);
if( hDIB == NULL )
return;
WriteDIB( "monbmp.bmp", hDIB );
GlobalFree( hDIB ); |
Partager