请问:滚动滚动条后,新滚动出来的图片区域为什么是花的?内有代码。
请教:滚动滚动条后,新滚动出来的图片区域为什么是花的?内有代码。急急急!
当滚动滚动条的时候,新滚动出来的区域怎么是花的,麻烦大家给看看
void CImageView::OnDraw(CDC* pDC)
{
CSuperImageDoc *pDoc=(CSuperImageDoc*)GetDocument();
CSuperImageView* pView = (CSuperImageView*)GetParent();
CMainFrame *pFrame=(CMainFrame*)(AfxGetApp()-> m_pMainWnd);
// TODO: add draw code here
if( !m_pPreviewBits )
{
return;
}
CRect rect;
CBitmap bmp;
CDC memDC;
HDRAWDIB hDrawdib;
CBrush brush( RGB( 255, 255, 255 ) );
GetClientRect(rect);
memDC.CreateCompatibleDC( pDC );
bmp.CreateCompatibleBitmap( pDC, rect.Width(), rect.Height() );
memDC.SelectObject( &bmp );
memDC.FillRect( CRect( 0, 0, rect.Width(), rect.Height() ), &brush );
int width = m_bitmapInfoHeader.biWidth; // 图像中要显示区域的高度和宽度
int height = m_bitmapInfoHeader.biHeight;
int w = int ( width * m_fImageZoom );//乘以放大倍数
int h = int( height * m_fImageZoom );
// added by ZB,动态设置滚动条
SIZE szTotal;
szTotal.cx=w;
szTotal.cy=h;
SetScrollSizes(MM_TEXT,szTotal);
//pDoc-> UpdateAllViews(this);
CPoint cpScrollPos=GetScrollPosition();
.....................................................
.....................................................
DrawDibBegin( hDrawdib, memDC.m_hDC, rect.Width(), rect.Height(),
( BITMAPINFOHEADER* )m_pBitmapInfo,rect.Width(), rect.Height(),DDF_SAME_DIB );
DrawDibDraw( hDrawdib, memDC.m_hDC, 0 , 0 , w, h, ( BITMAPINFOHEADER* )m_pBitmapInfo,
m_pPreviewBits,m_ptImageStartPos.x,m_ptImageStartPos.y, width, height, DDF_SAME_DIB );
if (m_nToolType==TOOL_MAGNIFIER)
{
int nWidth=MAGNIFIER_WIDTH/2;
int nNewWidth=(int)(nWidth*m_fMagnifierZoon+0.5);
memDC.StretchBlt(m_ptEnd.x-nNewWidth,m_ptEnd.y-nNewWidth,nNewWidth*2,nNewWidth*2,&memDC,
m_ptEnd.x-nWidth,m_ptEnd.y-nWidth,MAGNIFIER_WIDTH,MAGNIFIER_WIDTH,SRCCOPY);
}
DrawDibClose( hDrawdib );
..................................................................
..................................................................
pDC-> BitBlt( 0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY );
}
------解决方案--------------------
给你个参考,我的程序没那问题
void CDrawShapeView::OnDraw(CDC* pDC)
{
CDrawShapeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize sz;
sz = GetTotalSize();
// TODO: add draw code for native data here
CDC MemDC; //定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//建立一个与屏幕显示兼容的位图,位图的大小用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,sz.cx,sz.cy);
当滚动滚动条的时候,新滚动出来的区域怎么是花的,麻烦大家给看看
void CImageView::OnDraw(CDC* pDC)
{
CSuperImageDoc *pDoc=(CSuperImageDoc*)GetDocument();
CSuperImageView* pView = (CSuperImageView*)GetParent();
CMainFrame *pFrame=(CMainFrame*)(AfxGetApp()-> m_pMainWnd);
// TODO: add draw code here
if( !m_pPreviewBits )
{
return;
}
CRect rect;
CBitmap bmp;
CDC memDC;
HDRAWDIB hDrawdib;
CBrush brush( RGB( 255, 255, 255 ) );
GetClientRect(rect);
memDC.CreateCompatibleDC( pDC );
bmp.CreateCompatibleBitmap( pDC, rect.Width(), rect.Height() );
memDC.SelectObject( &bmp );
memDC.FillRect( CRect( 0, 0, rect.Width(), rect.Height() ), &brush );
int width = m_bitmapInfoHeader.biWidth; // 图像中要显示区域的高度和宽度
int height = m_bitmapInfoHeader.biHeight;
int w = int ( width * m_fImageZoom );//乘以放大倍数
int h = int( height * m_fImageZoom );
// added by ZB,动态设置滚动条
SIZE szTotal;
szTotal.cx=w;
szTotal.cy=h;
SetScrollSizes(MM_TEXT,szTotal);
//pDoc-> UpdateAllViews(this);
CPoint cpScrollPos=GetScrollPosition();
.....................................................
.....................................................
DrawDibBegin( hDrawdib, memDC.m_hDC, rect.Width(), rect.Height(),
( BITMAPINFOHEADER* )m_pBitmapInfo,rect.Width(), rect.Height(),DDF_SAME_DIB );
DrawDibDraw( hDrawdib, memDC.m_hDC, 0 , 0 , w, h, ( BITMAPINFOHEADER* )m_pBitmapInfo,
m_pPreviewBits,m_ptImageStartPos.x,m_ptImageStartPos.y, width, height, DDF_SAME_DIB );
if (m_nToolType==TOOL_MAGNIFIER)
{
int nWidth=MAGNIFIER_WIDTH/2;
int nNewWidth=(int)(nWidth*m_fMagnifierZoon+0.5);
memDC.StretchBlt(m_ptEnd.x-nNewWidth,m_ptEnd.y-nNewWidth,nNewWidth*2,nNewWidth*2,&memDC,
m_ptEnd.x-nWidth,m_ptEnd.y-nWidth,MAGNIFIER_WIDTH,MAGNIFIER_WIDTH,SRCCOPY);
}
DrawDibClose( hDrawdib );
..................................................................
..................................................................
pDC-> BitBlt( 0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY );
}
------解决方案--------------------
给你个参考,我的程序没那问题
void CDrawShapeView::OnDraw(CDC* pDC)
{
CDrawShapeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CSize sz;
sz = GetTotalSize();
// TODO: add draw code for native data here
CDC MemDC; //定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象
//建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//建立一个与屏幕显示兼容的位图,位图的大小用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,sz.cx,sz.cy);