Click here to Skip to main content
15,867,956 members
Articles / Desktop Programming / MFC
Article

PreviewCtrl

Rate me:
Please Sign up or sign in to vote.
4.74/5 (22 votes)
2 Sep 20051 min read 85.3K   3.6K   53   14
Showing an image in a CStatic control.

Sample Image - PreviewCtrl.jpg

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:

// change the control's class from CStatic to CPreviewRect
CPreviewRect m_bitmap;

In your FileOpen handler:

// create your file dialog
CFileDialog dlg(TRUE, 0, 0, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, 
                    "Bitmaps (.bmp)|*.bmp|All files(*.*)|*.*||");

// ask user
if (dlg.DoModal() == IDCANCEL) return;

// load the selected bitmap file
m_bitmap.LoadBitmap(dlg.GetPathName());

// check recent file operation (IsInitialized() should return TRUE)
if (!m_bitmap.IsInitialized())
{
    // load error bitmap from a resource (if you have any)
    m_bitmap.LoadBitmap(IDB_BLUESCREEN);
}

// resize bitmap to save up memory and speed up drawing
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)

License

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


Written By
Web Developer
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
GeneralOnly horizontal resizing. . Pin
Varchas R S27-Nov-08 23:31
Varchas R S27-Nov-08 23:31 
General[Message Removed] Pin
immetoz4-Oct-08 2:01
immetoz4-Oct-08 2:01 
GeneralThanks a lot! Pin
rehanone17-Jul-08 3:12
rehanone17-Jul-08 3:12 
Generalthanks !!! Pin
jofavi7-Apr-07 13:57
jofavi7-Apr-07 13:57 
GeneralWonderful Pin
del Fuego2-Feb-07 6:31
del Fuego2-Feb-07 6:31 
GeneralSuperb Pin
Expategghead6-Mar-06 0:15
Expategghead6-Mar-06 0:15 
GeneralThenk you, Pin
Staon15-Jan-06 22:33
Staon15-Jan-06 22:33 
QuestionHow to save CBitmap to file Pin
caykahve24-Dec-05 9:39
caykahve24-Dec-05 9:39 
QuestionWay cool error message/bmp Pin
daylightdj7-Sep-05 2:07
daylightdj7-Sep-05 2:07 
AnswerRe: Way cool error message/bmp Pin
Achim Klein8-Sep-05 0:47
Achim Klein8-Sep-05 0:47 
GeneralDOxygen Pin
uplink22-Sep-05 2:08
uplink22-Sep-05 2:08 
GeneralRe: DOxygen Pin
Achim Klein8-Sep-05 1:27
Achim Klein8-Sep-05 1:27 
GeneralIt's simple Pin
CandleLight6662-Sep-05 0:58
CandleLight6662-Sep-05 0:58 
GeneralThank you! Pin
Michael Kane2-Sep-05 0:49
Michael Kane2-Sep-05 0:49 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.