⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gwextdibsectionlite.h

📁 完整的MP3播放器源码
💻 H
字号:
// GWExtDIBSectionLite.h: interface for the GWExtDIBSectionLite class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GWEXTDIBSECTIONLITE_H__8AD9D763_7EBD_11DA_B5EA_525400EA266C__INCLUDED_)
#define AFX_GWEXTDIBSECTIONLITE_H__8AD9D763_7EBD_11DA_B5EA_525400EA266C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//*******************************************************************************
// 版权声明
// ------------------------------------------------------------------------------
// 此段代码是AppBuilder扩展类库GWC的一部分.
// 你可以使用、重新编译、或者编译成你的发行软件的一部分。
// 但是在没有经过我们书面同意的情况下,你不能直接发行此代码文件.
//-------------------------------------------------------------------------------
// 版权所有.
// 作者:张修勇
// 拷贝日期:2000年10月05日
//-------------------------------------------------------------------------------
// 主页:   http://www.ucancode.com
// 技术支持E-Mail: AppBuilder@hotmail.com
//*******************************************************************************
//#define DIBSECTION_NO_DITHER          // Disallow dithering via DrawDib functions
#define DIBSECTION_NO_MEMDC_REUSE       // Disallow the reuse of memory DC's
//#define DIBSECTION_NO_PALETTE         // Remove palette support

// Only provide palette support for non-CE platforms, or for CE 2.11 and above
#ifdef _WIN32_WCE
#define DIBSECTION_NO_DITHER            // DrawDib not supported on CE
#if (_WIN32_WCE < 211)
#define DIBSECTION_NO_PALETTE           // No palette support on early CE devices
#endif
#endif

// Include headers and lib for DrawDib routines
#ifndef DIBSECTION_NO_DITHER 
#include <vfw.h>
#pragma comment(lib, "vfw32")
#endif


#define DS_BITMAP_FILEMARKER  ((WORD) ('M' << 8) | 'B')    // is always "BM" = 0x4D42

/////////////////////////////////////////////////////////////////////////////
// BITMAPINFO wrapper

struct  DIBINFO : public BITMAPINFO
{
	RGBQUAD	 arColors[255];    // Color table info - adds an extra 255 entries to palette

	operator LPBITMAPINFO()          { return (LPBITMAPINFO) this; }
	operator LPBITMAPINFOHEADER()    { return &bmiHeader;          }
	RGBQUAD* ColorTable()            { return bmiColors;           }
};

/////////////////////////////////////////////////////////////////////////////
// LOGPALETTE wrapper

#ifndef DIBSECTION_NO_PALETTE
struct  PALETTEINFO : public LOGPALETTE
{
    PALETTEENTRY arPalEntries[255];               // Palette entries

    PALETTEINFO() 
    {
        palVersion    = (WORD) 0x300;
        palNumEntries = 0;
        ::memset(palPalEntry, 0, 256*sizeof(PALETTEENTRY)); 
    }

    operator LPLOGPALETTE()   { return (LPLOGPALETTE) this;            }
    operator LPPALETTEENTRY() { return (LPPALETTEENTRY) (palPalEntry); }
};
#endif // DIBSECTION_NO_PALETTE


/////////////////////////////////////////////////////////////////////////////
// GWExtDIBSectionLite object

class GWExtDIBSectionLite : public CObject
{
// Construction
public:
	GWExtDIBSectionLite();
	virtual ~GWExtDIBSectionLite();
    void DeleteObject();

// static helpers
public:
    static int BytesPerLine(int nWidth, int nBitsPerPixel);
    static int NumColorEntries(int nBitsPerPixel, int nCompression);

    static RGBQUAD ms_StdColors[];
#ifndef DIBSECTION_NO_PALETTE
    static BOOL UsesPalette(CDC* pDC) { return (pDC->GetDeviceCaps(RASTERCAPS) & RC_PALETTE); }
    static BOOL CreateHalftonePalette(CPalette& palette, int nNumColors);
#endif // DIBSECTION_NO_PALETTE

// Attributes
public:
    HBITMAP      GetSafeHandle() const       { return (this)? m_hBitmap : NULL;        }
    operator     HBITMAP() const             { return GetSafeHandle();                 }
    CSize        GetSize() const             { return CSize(GetWidth(), GetHeight());  }
    int          GetHeight() const           { return m_DIBinfo.bmiHeader.biHeight;    } 
    int          GetWidth() const            { return m_DIBinfo.bmiHeader.biWidth;     }
    int          GetPlanes() const           { return m_DIBinfo.bmiHeader.biPlanes;    }
    int          GetBitCount() const         { return m_DIBinfo.bmiHeader.biBitCount;  }
    LPVOID       GetDIBits()                 { return m_ppvBits;                       }
    LPBITMAPINFO GetBitmapInfo()             { return  (BITMAPINFO*) m_DIBinfo;        }
    DWORD        GetImageSize() const        { return m_DIBinfo.bmiHeader.biSizeImage; }
    LPBITMAPINFOHEADER GetBitmapInfoHeader() { return (BITMAPINFOHEADER*) m_DIBinfo;   }

// Operations (Palette)
public:
    LPRGBQUAD GetColorTable()             { return m_DIBinfo.ColorTable();          }
    BOOL      SetColorTable(UINT nNumColors, RGBQUAD *pColors);
    int       GetColorTableSize()         { return m_iColorTableSize;               }
#ifndef DIBSECTION_NO_PALETTE
    CPalette *GetPalette()  { return &m_Palette; }
    BOOL      SetPalette(CPalette* pPalette);
    BOOL      SetLogPalette(LOGPALETTE* pLogPalette);
#endif // DIBSECTION_NO_PALETTE

// Operations (Setting the bitmap)
public:
    BOOL SetBitmap(UINT nIDResource);
    BOOL SetBitmap(LPCTSTR lpszResourceName);
    BOOL SetBitmap(HBITMAP hBitmap
#ifndef DIBSECTION_NO_PALETTE
                   , CPalette* pPalette = NULL
#endif
                   );
    BOOL SetBitmap(LPBITMAPINFO lpBitmapInfo, LPVOID lpBits);   

    BOOL Load(LPCTSTR lpszFileName);
    BOOL Save(LPCTSTR lpszFileName);
    BOOL Copy(GWExtDIBSectionLite& Bitmap);

// Operations (Display)
public:
    BOOL Draw(CDC* pDC, CPoint ptDest, BOOL bForceBackground = FALSE);
    BOOL Stretch(CDC* pDC, CPoint ptDest, CSize size, BOOL bForceBackground = FALSE);

#ifndef DIBSECTION_NO_DITHER
    BOOL SetDither(BOOL bDither);
    BOOL GetDither();
#endif // DIBSECTION_NO_DITHER

    CDC* GetMemoryDC(CDC* pDC = NULL, BOOL bSelectPalette = TRUE);
    BOOL ReleaseMemoryDC(BOOL bForceRelease = FALSE);

// Overrideables

// Implementation
public:
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext& dc) const;
#endif

// Implementation
protected:
    void _ShowLastError();
#ifndef DIBSECTION_NO_PALETTE
    BOOL CreatePalette();
    BOOL FillDIBColorTable(UINT nNumColors, RGBQUAD *pRGB);
#endif // DIBSECTION_NO_PALETTE
    UINT GetColorTableEntries(HDC hdc, HBITMAP hBitmap);
#ifndef DIBSECTION_NO_DITHER
    HDRAWDIB GetDrawDibContext();
#endif // DIBSECTION_NO_DITHER

protected:
    HBITMAP  m_hBitmap;          // Handle to DIBSECTION
    DIBINFO  m_DIBinfo;          // Bitmap header & color table info
    VOID    *m_ppvBits;          // Pointer to bitmap bits
    UINT     m_iColorDataType;   // color data type (palette or RGB values)
    UINT     m_iColorTableSize;  // Size of color table

    CDC      m_MemDC;            // Memory DC for drawing on bitmap

#ifndef DIBSECTION_NO_DITHER
    BOOL     m_bDither;           // Use DrawDib routines for dithering?
    HDRAWDIB m_hDrawDib;          // handle to a DrawDib DC 
#endif

#ifndef DIBSECTION_NO_MEMDC_REUSE
    BOOL     m_bReuseMemDC;      // Reeuse the memory DC? (Quicker, but not fully tested)
#endif

#ifndef DIBSECTION_NO_PALETTE
    CPalette m_Palette;         // Color palette
    CPalette *m_pOldPalette;
#endif // DIBSECTION_NO_PALETTE

private:
    HBITMAP  m_hOldBitmap;      // Storage for previous bitmap in Memory DC
};


#endif // !defined(AFX_GWEXTDIBSECTIONLITE_H__8AD9D763_7EBD_11DA_B5EA_525400EA266C__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -