bsp( hBitmap = = NULL ) {AfxMessageBox(”Cannot form a DIBSection”)  return false }
m- pBmpFile - > ReadHuge (lpBits ,dwBitlen)
mmhBitmap = new Cbitmap hPalette = new Cpalette
mmhBitmap - > Attach(hBitmap)  / / 将该位图与一个CBitmap 对象联系起来
nColors = lpBitmap - > bmiHeader. biClrUsed ? lpBitmap - > bmiHeader. biClrUsed \
:1 < < lpBitmap - > bmiHeader. biBitCount
nWidth = lpBitmap - > bmiHeader. biWidth
nHeight = lpBitmap - > bmiHeader. biHeight
CDC dc
if ( nColors > 256 ) / / 颜色数> 256
hPalette - > CreateHalftonePalette( &dc )
else / / 颜色数< = 256
{
RGBQUAD 3 prgb = new RGBQUAD[ nColors ]
CDC memdc
memdc. CreateCompatibleDC( &dc)
memdc. SelectObject ( &mmhBitmap )
: : GetDIBColorTable( memdc , 0 , nColors , prgb )
UINT nsize = sizeof (LOGPAL ETTE) + (sizeof (PAL ETTEENTRY) 3 nColors)
LOGPAL ETTE 3 plp = (LOGPAL ETTE 3 ) new byte[ nsize ]
plp - > palVersion = 0x300
plp - > palNumEntries = nColors
for ( int i = 0  i < nColors i + + )  {
plp - > palPalEntry[i ] . peRed = prgb[i ] . rgbRed
plp - > palPalEntry[i ] . peGreen = prgb[i ] . rgbGreen
plp - > palPalEntry[i ] . peBlue = prgb[i ] . rgbBlue
plp - > palPalEntry[i ] . peFlags = 0
}
hPalette - > CreatePalette( plp )
delete plp delete prgb
}
m- pBmpFile - > Close() delete m-pBmpFile m-pBmpFile = NULL
return TRUE;
}
void CShowBmpView : :OnDraw(CDC 3 pDC)
{
CShowBmpDoc 3 pDoc = Getdocument.nbsp()
ASSERT-VAL ID(pDoc)
if ( ! pDoc - > mmhBitmap) return
CDC memdc
memdc. CreateCompatibleDC(pDC )
memdc. SelectObject ( pDoc - > mmhBitmap )
if (pDC - > GetDeviceCaps(RASTERCAPS) & RC- PAL ETTE & & \
pDoc - > hPalette - > m- hObject ! = NULL)
{
pDC - >