Solved

Display a bitmap in a dialog

Posted on 1998-11-29
7
236 Views
Last Modified: 2013-12-03
Okay, this has to be an easy easy easy problem.  How do I load a bitmap from a file and display it in a dialog based application?  There is no need for scaling, rotating, or any of that.  All I want is to load a bitmap given a filename and display it in a dialog.

Thank you.
0
Comment
Question by:a121496
  • 4
  • 2
7 Comments
 
LVL 8

Expert Comment

by:Answers2000
ID: 1325473
1. On dialog resource create a static control, make sure it has SS_BITMAP style.  Change the resource id from IDC_STATIC to something else,  e.g. IDC_STATIC_PICT

2.Bind a CStatic member variable to the static control (member variables tab in class wiz), say m_staticPict.

3. Use LoadImage API call to load the file, this gives you back a HBITMAP.  As the return type is an HANDLE, you need to cast it

HBITMAP hBitmap = (HBITMAP)::LoadImage( ...etc...)

4. Use SetBitmap member of m_staticPict to set the bitmap

e.g.
m_staticPict.SetBitmap( hBitmap ) ;


That's it.
0
 

Author Comment

by:a121496
ID: 1325474
I am going to have to reject your answer since I wanted one that loads a BMP from a FILE not from the resource.  Points are at 50 now.
0
 
LVL 8

Accepted Solution

by:
Answers2000 earned 50 total points
ID: 1325475
Step 3 in my original answer can load from a FILE or a resource (NT4 or 95 or 98)

To make it load file a file, make the last parameter of LoadImage (fuLoad) include the LR_LOADFROMFILE flag, and lpszName point (LPCSTR) to a NUL terminated containing the file name.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Expert Comment

by:martin_yeh
ID: 1325476
Here is a example for RGB color. If you load indexed color image, the GetPaletteSize will be different. You can compute the size yourself.
first read the bitmap file into a buffer. let's say pBuffer is a pointer pointing to the head of this buffer

void Display(pBuffer)
{
 LPBITMAPINFO  pBitmapInfo = pBuffer + sizeof(BITMAPFILEHEADER);
 LPBITMAPINFOHEADER pBitmapInfoHeader = pBitmapInfo.bmiHeader;
 PCHAR pData = pBitmapInfo + GetPaletteSize(pBitmapInfo);
SetDibitsToDevice(p1,p2,p3,p4,p5,p6,p7,p8,p1,pData,pBitmapInfoHeader,.....);
}

DWORD GetPaletteSize(LPBITMAPINFO)
{
LPBITMAPINFOHEADER pHeader = pBitmapInfo.bmiHeader;
if (pHeader.biClrUsed ==0)
return 256*sizeof(RGBQUAD);
else
return pHeader.biClrUsed*sizeof(RGBQUAD);
}
0
 

Author Comment

by:a121496
ID: 1325477
It is clear that Answers knows what he is talking about.  I have this code:

void CTestDlg::OnButtonLoad ()
{ HBITMAP hBitmap = (HBITMAP) ::LoadImage (0, m_Filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
  if (hBitmap == NULL)
  { MessageBox ("ERROR!"); }

  m_BMP.SetBitmap (hBitmap);
}

It does not give me an "ERROR!"  But nothing is displayed on the screen at the location of the static resource either.  What am I doing wrong?
0
 

Author Comment

by:a121496
ID: 1325478
Perhaps I should replace the first parameter of the LoadImage function with something other than 0?  What though?
0
 

Author Comment

by:a121496
ID: 1325479
I was making stupid mistakes (several).  Suffice it to say you answered my question well.  Thanks.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Database storage, where is the exe actually on the disc? Playing a game selected randomly (how to generate random numbers).  Error trapping with try..catch to help the code run even if something goes wrong. Continuing from the seve…
If you use Adobe Reader X it is possible you can't open OLE PDF documents in the standard. The reason is the 'save box mode' in adobe reader X. Many people think the protected Mode of adobe reader x is only to stop the write access. But this fe…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

920 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now