Introduction
Tutorial for using a CScrollView
Description
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.
Implementation
Step 1
Create a MDI Application by selecting MULTIPLE DOCUMENTS in Step 1
of the appwizard process.
Step 2
In the 6th step, select the View class and in the combobox 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); // IDB_BMP_BKGND is a bitmap 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.
Conclusion
Thats it. Now, you have a scrolling window Which displays a bitmap too
All Luck.
|