资源描述
一、对话框中显示位图
1.在资源中导入位图文件
2.在对话框中添加PICTURE控件,属性中TYPE项选择BITMAP,IMAGE项选择导入的图片的ID
3.根据图片的大小要调整一下控件的大小
二、单文档中显示位图
1、在资源中导入位图文件,并创建位图对象
2、创建兼容DC,选择位图到兼容DC中
3、把兼容DC中的图片复制到实际的DC中,用BitBlt方法或StretchBlt方法,后者可以把图片拉伸或压缩符合目标矩形的大小
view plaincopy to clipboardprint?
01.void CGraphicView::OnDraw(CDC* pDC)
02.{
03. CBitmap bitmap;
04. bitmap.LoadBitmap(IDB_BITMAP1);
05.
06. BITMAP bmp;
07. bitmap.GetBitmap(&bmp);
08.
09. CDC dcCompatible;
10. dcCompatible.CreateCompatibleDC(pDC);
11.
12. dcCompatible.SelectObject(&bitmap);
13.
14. CRect rect;
15. GetClientRect(&rect);
16.// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
17. pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
18. 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
19.}
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); 就不会产生闪动的问题。
view plaincopy to clipboardprint?
01.BOOL CGraphicView::OnEraseBkgnd(CDC* pDC)
02.{
03. // TODO: Add your message handler code here and/or call default
04. CBitmap bitmap;
05. bitmap.LoadBitmap(IDB_BITMAP1);
06.
07. BITMAP bmp;
08. bitmap.GetBitmap(&bmp);
09.
10. CDC dcCompatible;
11. dcCompatible.CreateCompatibleDC(pDC);
12.
13. dcCompatible.SelectObject(&bitmap);
14.
15. CRect rect;
16. GetClientRect(&rect);
17.// pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
18. pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,
19. 0,0,bmp.bmWidth,bmp.bmHeight,SRCCOPY);
20. return TRUE;
21.// return CView::OnEraseBkgnd(pDC);
22.}
本文来自CSDN博客,转载请标明出处:
展开阅读全文