高分求救:映射模式MM_LOMETRIC下,bmp文件加载到CScrollView
我在函数LoadFormatPicture里加载bmp图片到内存DC中,然后在OnDraw函数里bitblt内存DC到显示DC中
映射模式设成MM_TEXT能正常加载和显示,如果改成MM_LOMETRIC则显示一块黑色区域,高分求救程序哪里不对?怎么改?先谢谢了void CFormPrinterView::LoadFormatPicture()
{
CFormPrinterDoc *pDoc = GetDocument() ;
HBITMAP hbm ;
BITMAP bm ;
CDC *pDC = GetDC() , *pTmpDC = NULL ;
CBitmap *pbitmapOldTmp = NULL , bitmapTmp ; // 装载外部位图
hbm = (HBITMAP)::LoadImage( NULL , pDoc->m_strBitmapFilename , IMAGE_BITMAP , 0 , 0 , LR_DEFAULTSIZE | LR_LOADFROMFILE ) ;
bitmapTmp.Attach( hbm );
bitmapTmp.GetBitmap( &bm );
m_szPicture.cx = bm.bmWidth ;
m_szPicture.cy = bm.bmHeight ;
// 设置窗口大小
SetScrollSizes( MM_TEXT , m_szPicture );
//SetScrollSizes( MM_LOMETRIC , m_szPicture );
// 创建临时DC
pTmpDC = new CDC ;
pTmpDC->CreateCompatibleDC( pDC );
// 拷贝临时DC到内存DC
pbitmapOldTmp = pTmpDC->SelectObject( &bitmapTmp ) ;
m_pMemDC->CreateCompatibleDC( pDC );
m_pMemBitmap->CreateCompatibleBitmap( pDC , m_szPicture.cx , m_szPicture.cy );
m_pOldMemBitmap = m_pMemDC->SelectObject( m_pMemBitmap ) ;
//m_pMemDC->BitBlt( 0 , -m_szPicture.cy , m_szPicture.cx , m_szPicture.cy , pTmpDC , 0 , 0 , SRCCOPY );
m_pMemDC->BitBlt( 0 , 0 , m_szPicture.cx , m_szPicture.cy , pTmpDC , 0 , 0 , SRCCOPY );
m_pMemDC->SelectObject( m_pOldMemBitmap ) ;
pTmpDC->SelectObject( pbitmapOldTmp ) ;
/* 销毁临时DC */
delete pTmpDC ;
bitmapTmp.Detach();
ReleaseDC( pDC );
Invalidate();
return;
}void CFormPrinterView::OnDraw(CDC* pDC)
{
CFormPrinterDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if( pDoc->m_strBitmapFilename == "" )
return;
m_pOldMemBitmap = m_pMemDC->SelectObject( m_pMemBitmap ) ;
//pDC->BitBlt( 0 , -m_szPicture.cy , m_szPicture.cx , m_szPicture.cy , m_pMemDC , 0 , 0 ,SRCCOPY );
pDC->BitBlt( 0 , 0 , m_szPicture.cx , m_szPicture.cy , m_pMemDC , 0 , 0 ,SRCCOPY );
m_pMemDC->SelectObject( m_pOldMemBitmap );
}
我在函数LoadFormatPicture里加载bmp图片到内存DC中,然后在OnDraw函数里bitblt内存DC到显示DC中
映射模式设成MM_TEXT能正常加载和显示,如果改成MM_LOMETRIC则显示一块黑色区域,高分求救程序哪里不对?怎么改?先谢谢了void CFormPrinterView::LoadFormatPicture()
{
CFormPrinterDoc *pDoc = GetDocument() ;
HBITMAP hbm ;
BITMAP bm ;
CDC *pDC = GetDC() , *pTmpDC = NULL ;
CBitmap *pbitmapOldTmp = NULL , bitmapTmp ; // 装载外部位图
hbm = (HBITMAP)::LoadImage( NULL , pDoc->m_strBitmapFilename , IMAGE_BITMAP , 0 , 0 , LR_DEFAULTSIZE | LR_LOADFROMFILE ) ;
bitmapTmp.Attach( hbm );
bitmapTmp.GetBitmap( &bm );
m_szPicture.cx = bm.bmWidth ;
m_szPicture.cy = bm.bmHeight ;
// 设置窗口大小
SetScrollSizes( MM_TEXT , m_szPicture );
//SetScrollSizes( MM_LOMETRIC , m_szPicture );
// 创建临时DC
pTmpDC = new CDC ;
pTmpDC->CreateCompatibleDC( pDC );
// 拷贝临时DC到内存DC
pbitmapOldTmp = pTmpDC->SelectObject( &bitmapTmp ) ;
m_pMemDC->CreateCompatibleDC( pDC );
m_pMemBitmap->CreateCompatibleBitmap( pDC , m_szPicture.cx , m_szPicture.cy );
m_pOldMemBitmap = m_pMemDC->SelectObject( m_pMemBitmap ) ;
//m_pMemDC->BitBlt( 0 , -m_szPicture.cy , m_szPicture.cx , m_szPicture.cy , pTmpDC , 0 , 0 , SRCCOPY );
m_pMemDC->BitBlt( 0 , 0 , m_szPicture.cx , m_szPicture.cy , pTmpDC , 0 , 0 , SRCCOPY );
m_pMemDC->SelectObject( m_pOldMemBitmap ) ;
pTmpDC->SelectObject( pbitmapOldTmp ) ;
/* 销毁临时DC */
delete pTmpDC ;
bitmapTmp.Detach();
ReleaseDC( pDC );
Invalidate();
return;
}void CFormPrinterView::OnDraw(CDC* pDC)
{
CFormPrinterDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if( pDoc->m_strBitmapFilename == "" )
return;
m_pOldMemBitmap = m_pMemDC->SelectObject( m_pMemBitmap ) ;
//pDC->BitBlt( 0 , -m_szPicture.cy , m_szPicture.cx , m_szPicture.cy , m_pMemDC , 0 , 0 ,SRCCOPY );
pDC->BitBlt( 0 , 0 , m_szPicture.cx , m_szPicture.cy , m_pMemDC , 0 , 0 ,SRCCOPY );
m_pMemDC->SelectObject( m_pOldMemBitmap );
}
void DrawBitmap(int x,int y,CDC* pDC,CBitmap* pBitmap)
//此方法将图像显示到MM_TEXT坐标系下(x,y)处
{
BITMAP bm;
pBitmap->GetObject(sizeof(BITMAP),&bm);
CPoint size(bm.bmWidth,bm.bmHeight);
pDC->DPtoLP(&size);
CPoint org(0,0);
pDC->DPtoLP(&org);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap=MemDc.SelectObject(pBitmap);
MemDC.SetMapMode(pDC->GetMapMode());
pDC->BitBlt(x,y,size.x,size.y,&MemDC,org.x,org.y,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
}
好象CScrollView是不支持的吧..FormView支持不支持还没试过..!