Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /WinCS/ImageEx.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 11 - (hide annotations) (download) (as text)
Wed Feb 10 18:21:00 2010 UTC (14 years, 2 months ago) by sho1get
File MIME type: text/x-chdr
File size: 2954 byte(s)


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     //////////////////////////////////////////////////////////////////////////

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26