| 1 |
sho1get |
11 |
#pragma once |
| 2 |
|
|
|
| 3 |
|
|
//#include <gdiplus.h> |
| 4 |
|
|
//#pragma comment(lib, "gdiplus.lib") |
| 5 |
|
|
////////////////////////////////////////////////////////////////////////// |
| 6 |
|
|
|
| 7 |
|
|
class CImageEx |
| 8 |
|
|
{ |
| 9 |
|
|
public: |
| 10 |
|
|
Gdiplus::Bitmap* m_pBitmap; |
| 11 |
|
|
|
| 12 |
|
|
public: |
| 13 |
|
|
CImageEx() { m_pBitmap = NULL; } |
| 14 |
|
|
CImageEx(LPCWSTR pFile) { m_pBitmap = NULL; Load(pFile); } |
| 15 |
|
|
virtual ~CImageEx() { Empty(); } |
| 16 |
|
|
|
| 17 |
|
|
void Empty() { delete m_pBitmap; m_pBitmap = NULL; } |
| 18 |
|
|
|
| 19 |
|
|
BOOL Load(LPCWSTR pFile) |
| 20 |
|
|
{ |
| 21 |
|
|
Empty(); |
| 22 |
|
|
m_pBitmap = Gdiplus::Bitmap::FromFile(pFile); |
| 23 |
|
|
return (m_pBitmap->GetLastStatus() == Gdiplus::Ok); |
| 24 |
|
|
} |
| 25 |
|
|
|
| 26 |
|
|
operator Gdiplus::Bitmap*() const { return m_pBitmap; } |
| 27 |
|
|
}; |
| 28 |
|
|
|
| 29 |
|
|
|
| 30 |
|
|
class CImageExResource : public CImageEx |
| 31 |
|
|
{ |
| 32 |
|
|
protected: |
| 33 |
|
|
HGLOBAL m_hBuffer; |
| 34 |
|
|
|
| 35 |
|
|
public: |
| 36 |
|
|
CImageExResource() |
| 37 |
|
|
{ m_hBuffer = NULL; } |
| 38 |
|
|
CImageExResource(LPCTSTR pName, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL) |
| 39 |
|
|
{ m_hBuffer = NULL; Load(pName, pType, hInst); } |
| 40 |
|
|
CImageExResource(UINT id, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL) |
| 41 |
|
|
{ m_hBuffer = NULL; Load(id, pType, hInst); } |
| 42 |
|
|
CImageExResource(UINT id, UINT type, HMODULE hInst = NULL) |
| 43 |
|
|
{ m_hBuffer = NULL; Load(id, type, hInst); } |
| 44 |
|
|
virtual ~CImageExResource() |
| 45 |
|
|
{ Empty(); } |
| 46 |
|
|
|
| 47 |
|
|
void Empty(); |
| 48 |
|
|
BOOL Load(LPCTSTR pName, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL); |
| 49 |
|
|
BOOL Load(UINT id, LPCTSTR pType = RT_RCDATA, HMODULE hInst = NULL) |
| 50 |
|
|
{ return Load(MAKEINTRESOURCE(id), pType, hInst); } |
| 51 |
|
|
BOOL Load(UINT id, UINT type, HMODULE hInst = NULL) |
| 52 |
|
|
{ return Load(MAKEINTRESOURCE(id), MAKEINTRESOURCE(type), hInst); } |
| 53 |
|
|
}; |
| 54 |
|
|
|
| 55 |
|
|
inline |
| 56 |
|
|
void CImageExResource::Empty() |
| 57 |
|
|
{ |
| 58 |
|
|
CImageEx::Empty(); |
| 59 |
|
|
|
| 60 |
|
|
if (m_hBuffer) |
| 61 |
|
|
{ |
| 62 |
|
|
::GlobalUnlock(m_hBuffer); |
| 63 |
|
|
::GlobalFree(m_hBuffer); |
| 64 |
|
|
m_hBuffer = NULL; |
| 65 |
|
|
} |
| 66 |
|
|
} |
| 67 |
|
|
|
| 68 |
|
|
inline |
| 69 |
|
|
BOOL CImageExResource::Load(LPCTSTR pName, LPCTSTR pType, HMODULE hInst) |
| 70 |
|
|
{ |
| 71 |
|
|
LPVOID lpResData; |
| 72 |
|
|
LPVOID lpBuffer; |
| 73 |
|
|
HRSRC hResource; |
| 74 |
|
|
DWORD dwImgSize; |
| 75 |
|
|
IStream *pStream = NULL; |
| 76 |
|
|
|
| 77 |
|
|
Empty(); |
| 78 |
|
|
|
| 79 |
|
|
hResource = ::FindResource(hInst, pName, pType); |
| 80 |
|
|
|
| 81 |
|
|
if (!hResource) |
| 82 |
|
|
{ |
| 83 |
|
|
return FALSE; |
| 84 |
|
|
} |
| 85 |
|
|
|
| 86 |
|
|
dwImgSize = ::SizeofResource(hInst, hResource); |
| 87 |
|
|
|
| 88 |
|
|
if (!dwImgSize) |
| 89 |
|
|
{ |
| 90 |
|
|
return FALSE; |
| 91 |
|
|
} |
| 92 |
|
|
|
| 93 |
|
|
lpResData = ::LockResource(::LoadResource(hInst, hResource)); |
| 94 |
|
|
|
| 95 |
|
|
if (!lpResData) |
| 96 |
|
|
{ |
| 97 |
|
|
return FALSE; |
| 98 |
|
|
} |
| 99 |
|
|
|
| 100 |
|
|
m_hBuffer = ::GlobalAlloc(GMEM_MOVEABLE, dwImgSize); |
| 101 |
|
|
|
| 102 |
|
|
if (m_hBuffer) |
| 103 |
|
|
{ |
| 104 |
|
|
lpBuffer = ::GlobalLock(m_hBuffer); |
| 105 |
|
|
|
| 106 |
|
|
if (lpBuffer) |
| 107 |
|
|
{ |
| 108 |
|
|
CopyMemory(lpBuffer, lpResData, dwImgSize); |
| 109 |
|
|
|
| 110 |
|
|
if (::CreateStreamOnHGlobal(m_hBuffer, FALSE, &pStream) == S_OK) |
| 111 |
|
|
{ |
| 112 |
|
|
m_pBitmap = Gdiplus::Bitmap::FromStream(pStream); |
| 113 |
|
|
pStream->Release(); |
| 114 |
|
|
|
| 115 |
|
|
if (m_pBitmap) |
| 116 |
|
|
{ |
| 117 |
|
|
if (m_pBitmap->GetLastStatus() == Gdiplus::Ok) |
| 118 |
|
|
{ |
| 119 |
|
|
return TRUE; |
| 120 |
|
|
} |
| 121 |
|
|
|
| 122 |
|
|
delete m_pBitmap; |
| 123 |
|
|
m_pBitmap = NULL; |
| 124 |
|
|
} |
| 125 |
|
|
} |
| 126 |
|
|
|
| 127 |
|
|
::GlobalUnlock(m_hBuffer); |
| 128 |
|
|
} |
| 129 |
|
|
|
| 130 |
|
|
::GlobalFree(m_hBuffer); |
| 131 |
|
|
m_hBuffer = NULL; |
| 132 |
|
|
} |
| 133 |
|
|
|
| 134 |
|
|
return FALSE; |
| 135 |
|
|
} |
| 136 |
|
|
|
| 137 |
|
|
////////////////////////////////////////////////////////////////////////// |