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); }