一、对话框中显示位图
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); }