| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- #pragma once
- class CGdiPlusBitmap
- {
- public:
- Gdiplus::Bitmap* m_pBitmap;
- public:
- CGdiPlusBitmap() { m_pBitmap = NULL; }
- CGdiPlusBitmap(LPCWSTR pFile) { m_pBitmap = NULL; Load(pFile); }
- virtual ~CGdiPlusBitmap() { Empty(); }
- void Empty() { delete m_pBitmap; m_pBitmap = NULL; }
- bool Load(LPCWSTR pFile)
- {
- Empty();
- m_pBitmap = Gdiplus::Bitmap::FromFile(pFile);
- return m_pBitmap->GetLastStatus() == Gdiplus::Ok;
- }
- operator Gdiplus::Bitmap*() const { return m_pBitmap; }
- };
- class CGdiPlusBitmapResource : public CGdiPlusBitmap
- {
- protected:
- HGLOBAL m_hBuffer;
- public:
- CGdiPlusBitmapResource() { m_hBuffer = NULL; }
- CGdiPlusBitmapResource(LPCTSTR pName, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL)
- { m_hBuffer = NULL; Load(pName, pType, hInst); }
- CGdiPlusBitmapResource(UINT id, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL)
- { m_hBuffer = NULL; Load(id, pType, hInst); }
- CGdiPlusBitmapResource(UINT id, UINT type, HMODULE hInst = NULL)
- { m_hBuffer = NULL; Load(id, type, hInst); }
- virtual ~CGdiPlusBitmapResource() { Empty(); }
- void Empty();
- bool Load(LPCTSTR pName, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL);
- bool Load(UINT id, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL)
- { return Load(MAKEINTRESOURCE(id), pType, hInst); }
- bool Load(UINT id, UINT type, HMODULE hInst = NULL)
- { return Load(MAKEINTRESOURCE(id), MAKEINTRESOURCE(type), hInst); }
- };
- inline
- void CGdiPlusBitmapResource::Empty()
- {
- CGdiPlusBitmap::Empty();
- if (m_hBuffer)
- {
- ::GlobalUnlock(m_hBuffer);
- ::GlobalFree(m_hBuffer);
- m_hBuffer = NULL;
- }
- }
- inline
- bool CGdiPlusBitmapResource::Load(LPCTSTR pName, LPCTSTR pType, HMODULE hInst)
- {
- Empty();
- HRSRC hResource = ::FindResource(hInst, pName, pType);
- if (!hResource)
- return false;
-
- DWORD imageSize = ::SizeofResource(hInst, hResource);
- if (!imageSize)
- return false;
- const void* pResourceData = ::LockResource(::LoadResource(hInst, hResource));
- if (!pResourceData)
- return false;
- m_hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, imageSize);
- if (m_hBuffer)
- {
- void* pBuffer = ::GlobalLock(m_hBuffer);
- if (pBuffer)
- {
- CopyMemory(pBuffer, pResourceData, imageSize);
- IStream* pStream = NULL;
- if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK)
- {
- m_pBitmap = Gdiplus::Bitmap::FromStream(pStream);
- pStream->Release();
- if (m_pBitmap)
- {
- if (m_pBitmap->GetLastStatus() == Gdiplus::Ok)
- return true;
- delete m_pBitmap;
- m_pBitmap = NULL;
- }
- }
- ::GlobalUnlock(m_hBuffer);
- }
- ::GlobalFree(m_hBuffer);
- m_hBuffer = NULL;
- }
- return false;
- }
|