VC中显示位图

一、对话框中显示位图

1.在资源中导入位图文件

2.在对话框中添加PICTURE控件,属性中TYPE项选择BITMAP,IMAGE项选择导入的图片的ID

3.根据图片的大小要调整一下控件的大小

 

二、单文档中显示位图

1、在资源中导入位图文件,并创建位图对象

2、创建兼容DC,选择位图到兼容DC中

3、把兼容DC中的图片复制到实际的DC中,用BitBlt方法或StretchBlt方法,后者可以把图片拉伸或压缩符合目标矩形的大小

 

void CGraphicView::OnDraw(CDC* pDC) { CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); dcCompatible.SelectObject(&bitmap); CRect rect; GetClientRect(&rect); // pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY); pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); }

 

兼容DC可以理解成就是一块内存,创建后只存储一个像素,当导入BITMAP后,就变为和位图同样大小的内存。

 

NOTE: 在OnDraw函数中显示图片会有个问题,当拖动界面边框的时候图片会一闪一闪的,是因为在调用OnDraw之前会先擦除背景。

擦除背景的函数是  BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) 。在这个函数中加入上述显示图片的代码,同时注释掉原来的return CView::OnEraseBkgnd(pDC);  就不会产生闪动的问题。

 

BOOL CGraphicView::OnEraseBkgnd(CDC* pDC) { // TODO: Add your message handler code here and/or call default CBitmap bitmap; bitmap.LoadBitmap(IDB_BITMAP1); BITMAP bmp; bitmap.GetBitmap(&bmp); CDC dcCompatible; dcCompatible.CreateCompatibleDC(pDC); dcCompatible.SelectObject(&bitmap); CRect rect; GetClientRect(&rect); // pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY); pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible, 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY); return TRUE; // return CView::OnEraseBkgnd(pDC); }

 

你可能感兴趣的:(VC++编程)