Displaying a Bitmap from a BMP File

Environment: MFC, Visual C++ 6.0, Windows 2000

The following code fragment shows how to read an image from a BMP file and display it in your MFC application window. You could see several articles on the same focus; the one I present here is very simple, with just a few lines of code. The code given below has been tested with Visual C++ 6.0 on Win 2000.

Create a single document interface application; select CFormView as the base class for the application's view base class. Click on the resource tab on the project explorer to navigate to the resource editor and drag a button to the dialog resource. Double-click the button to add a handler to the application's view class, as shown below.

void AppView::OnButton1()
{
}

Step 1: Load the Image File

Call the following:

CString szFilename ("C:\\Talla\\yourimg.bmp");
HBITMAP hBmp = (HBITMAP)::LoadImage(
                NULL,
                szFilename,
                IMAGE_BITMAP,
                0,
                0,
                LR_LOADFROMFILE|LR_CREATEDIBSECTION
                );

Step 2: Create a Bitmap Object and Attach It to the Object

CBitmap bmp;
bmp.Attach(hBmp);

Step 3: Create a Memory DC and Select the BMP to It

You also need to store the old BMP pointer:

CClientDC dc(this);
CDC bmDC;
bmDC.CreateCompatibleDC(&dc);
CBitmap *pOldbmp = bmDC.SelectObject(&bmp);

Step 4: Get the BMP Height and Width

Obtain this from CBitmap's GetBitmap function.

BITMAP  bi;
  bmp.GetBitmap(&bi);

Step 5: Get the Block of Pixels from memoryDC to the Screen

Use CClientDC's BitBlt function. Next, re-select the old BMP. The complete code is as follows:

void AppView::OnButton1()
{
   CString szFilename("C:\\Talla\\yourimg.bmp");
   HBITMAP hBmp = (HBITMAP)::LoadImage(NULL,szFilename,
                             IMAGE_BITMAP,0,0,
                             LR_LOADFROMFILE|LR_CREATEDIBSECTION);

   CBitmap bmp;
   bmp.Attach(hBmp);
   
   CClientDC dc(this);
   CDC bmDC;
   bmDC.CreateCompatibleDC(&dc);
   CBitmap *pOldbmp = bmDC.SelectObject(&bmp);

   BITMAP  bi;
   bmp.GetBitmap(&bi);

   dc.BitBlt(0,0,bi.bmWidth,bi.bmHeight,&bmDC,0,0,SRCCOPY);

   bmDC.SelectObject(pOldbmp);
}