65.9K
CodeProject is changing. Read more.
Home

Usage of the CScrollView class to add scrolling functionality to your application

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.06/5 (22 votes)

Jun 29, 2002

viewsIcon

108898

downloadIcon

2

Step by step usage of the CScrollView class to add scrolling to your application

Introduction

This code helps you to load a bitmap from a resource or from a file and show it in a MDI View. It enables scrolling and also scrolls the bitmap accordingly.

Steps to follow

Follow the following seven easy steps :-

Step 1

Create a MDI Application by selecting Multiple Documents Interface in Step 1 of the app-wizard process.

Step 2

In the 6th step, select the View class and in the combo box called base class , select CScrollView and then click Finish.

Step 3

Create the following variables in the View class (yourview.h file)

  • CDC m_MemDC;
  • CBitmap m_bmpView;
  • int m_nBmpWidth,m_nBmpHeight;

Step 4

In the View class , select the OnInitialUpdate function and change the code like this.

void CMDIView::OnInitialUpdate() 
{
    CDC *pDC = this->GetDC();

    m_MemDC.CreateCompatibleDC(pDC);

    m_bmpView.LoadBitmap(IDB_BMP_BKGND);    
    // Here IDB_BMP_BKGND is a bitmap included in the resource
    // Note : You can also load a bitmap from a file in the 
    // hard disk instead of using the bmp in the resource.

    m_MemDC.SelectObject(&m_bmpView);

    BITMAP Bitmap;
    m_bmpView.GetBitmap(&Bitmap);

    m_nBmpHeight = Bitmap.bmHeight;
    m_nBmpWidth = Bitmap.bmWidth;

    CSize size(m_nBmpWidth,m_nBmpHeight);
    SetScrollSizes(MM_TEXT,size);

    this->ReleaseDC(pDC);    
}

Step 5

Select the OnDraw function and change the code inside like this

void CMDIView::OnDraw(CDC* pDC)
{
    pDC->BitBlt(0,0,m_nBmpWidth,m_nBmpHeight,
        &m_MemDC,0,0,SRCCOPY);

    SetScrollSizes(MM_TEXT, CSize(m_nBmpWidth,m_nBmpHeight));
    CChildFrame *pParentFrame =
        (CChildFrame *)this->GetParentFrame();
    pParentFrame->RecalcLayout();
    ResizeParentToFit();    
}

Step 6

To prevent flickering of the bitmap when its being scrolled, override the View's OnEraseBkgnd and the ChildFrame's OnEraseBkgnd like this.

BOOL CMDIView::OnEraseBkgnd(CDC* pDC) 
{
    return TRUE;
}   

BOOL CChildFrame::OnEraseBkgnd(CDC* pDC) 
{
    return FALSE;
}

Step 7

Compile your project and run it. That's it. Now, you have a scrolling window which displays a bitmap too.  All luck and have a great time.