
Introduction
Drawing a CBitmap into a CStatic is a piece of cake. At least if you stop to mess around with CStatic::SetBitmap(). To get some running code, I derived CPreviewRect from CStatic and implemented the display routines manually. This small application demonstrates its usage.
Features
- The shown images are resizable and always shown in correct aspect ratio.
- The shown images can be resized to thumbnail size to save up memory and to speed up drawing.
- The shown images can be specified by:
- a path name
- a resource ID
- another
CBitmap
- raw RGB data (in conjunction with width and height information)
- Compared to
CStatic::SetBitmap() it works.
Background
CStatic::SetBitmap() drove me mad.
Using the code
Guess you have a dialog with a CStatic control on it, and you want to show loaded bitmaps in this control. First of all please make sure that the control's name differs from IDC_STATIC and create a related member variable. Now modify your code as follows:
In your dialog's header file:
CPreviewRect m_bitmap;
In your FileOpen handler:
CFileDialog dlg(TRUE, 0, 0, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST,
"Bitmaps (.bmp)|*.bmp|All files(*.*)|*.*||");
if (dlg.DoModal() == IDCANCEL) return;
m_bitmap.LoadBitmap(dlg.GetPathName());
if (!m_bitmap.IsInitialized())
{
m_bitmap.LoadBitmap(IDB_BLUESCREEN);
}
m_bitmap.CreateThumbnail(320, 240);
That's it!
History
Version 1.1
Added:
BorrowBitmap(CBitmap* pBitmap)
Changed:
CreateBitmap(CBitmap* pBitmap) has been renamed to CopyBitmap(CBitmap* pBitmap)
Version 1.0
Added:
LoadBitmap(const CString& Path)
LoadBitmap(UINT nIDResource)
CreateBitmap(CBitmap* pBitmap)
CreateBitmap(int Width, int Height, unsigned char* BGRA)
CreateThumbnail(int MaxWidth, int MaxHeight)
Reset(BOOL GraphicalUpdate = TRUE)
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here