프로그래밍/VC++

스크롤 뷰에 이미지파일을 올리고 스크롤 하는 예제

panpro 2007. 4. 21. 08:11

출처 : http://blog.naver.com/ccwii?Redirect=Log&logNo=90013295624

/* 스크롤 뷰에 이미지파일을 올리고 스크롤 하는 예제

/*************************************************************************************/

1. 뷰의 OnInitialUpdate에서

BITMAP bmpInfo;

m_Bitmap.m_hObject = (HGDIOBJ)LoadImage( NULL, "Image.bmp", IMAGE_BITMAP, 0, 0,
                               LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_DEFAULTSIZE );

m_Bitmap.GetBitmap( &bmpInfo );

m_nBmpHeight = bmpInfo.bmHeight;
m_nBmpWidth = bmpInfo.bmWidth;


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


CClientDC dc(this);


m_hMemDC.CreateCompatibleDC( &dc );
m_hBackDC.CreateCompatibleDC( &dc );

m_BackBitmap.CreateCompatibleBitmap( &dc, m_nBmpWidth, m_nBmpHeight );


m_pOldBackBitmap = (CBitmap *)m_hBackDC.SelectObject( &m_BackBitmap );
m_pOldBitmap = (CBitmap *)m_hMemDC.SelectObject( &m_Bitmap );


2. 뷰의 OnDraw에서

CRect rt;


m_ScrollPos = GetScrollPosition();


GetClientRect( &rt );

m_hBackDC.BitBlt( 0, 0, rt.Width(), rt.Height(), &m_hMemDC, m_ScrollPos.x, m_ScrollPos.y, SRCCOPY );

pDC->BitBlt( m_ScrollPos.x, m_ScrollPos.y, rt.Width(), rt.Height(), &m_hBackDC, 0, 0, SRCCOPY );


3. 뷰의 OnDestroy에서

m_hBackDC.SelectObject( &m_pOldBackBitmap );