This article describes a very easy to use class that enables you to draw an image of almost any type to the screen.
Another feature it demonstrates is using the resource to store the images. By using the static function
GetResource in another context, you can very easily store Wave-files or document templates in the resource of your application. This example has three images stored in memory: Image 1 is a JPEG image, image 2 is a GIF image and image 3 is a bitmap.
By examining the example, it will be very clear how the class should be used. Below, the most important code is shown.
This example also implements the
CMemDC written by Keith Rule to enhance the drawing. (FlickerFree Drawing).
bool CPicture::LoadFromBuffer(BYTE* pBuff, int nSize)
bool bResult = false;
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize);
void* pData = GlobalLock(hGlobal);
memcpy(pData, pBuff, nSize);
IStream* pStream = NULL;
if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
if ((hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture,
(LPVOID *)&m_pPicture)) == S_OK)
bResult = true;
bool CPicture::Draw(CDC* pDC, int x, int y, int cx, int cy)
if (m_pPicture->Render(pDC->m_hDC, x, y, cx, cy, 0,
hmHeight, hmWidth, -hmHeight, NULL) == S_OK)