界面加载位图

本文介绍如何在MFC单文档工程中加载位图资源并显示。首先将位图导入到res文件夹,然后在View类的OnDraw函数中加载位图并使用BitBlt函数进行绘制。同时,为了防止窗口改变大小时的闪烁,文章还讨论了在OnEraseBkgnd函数中如何处理背景擦除和位图填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建一个单文档的MFC工程
复制一张位图至项目文件的res文件夹中
在项目工作区资源视图中"import'资源文件夹中的位图,ID为:IDB_BITMAP1

在View类的OnDraw函数中代码如下:
void CGrapView::OnDraw(CDC* pDC)
{
CGrapDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

//1.加载位图
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);  

//定义BITMAP结构类型的对象
BITMAP bmp;   
//将当前位图的信息放入到位图结构体对象中
bitmap.GetBitmap(&bmp);  

CDC dc;
//2.创建和当前pDC兼容的DC
dc.CreateCompatibleDC(pDC);

//3.将位图选入DC
dc.SelectObject(&bitmap);  

//4.将dc中的位图拷贝到目的dc
CRect rect;
GetClientRect(&rect);
//原图大小1:1拷贝
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,SRCCOPY);  

//充满客户区大小拷贝
//pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dc,0,0,
bmp.bmWidth,bmp.bmHeight,SRCCOPY); 

// TODO: add draw code for native data here
}



贴图时会先擦除背景,也可以在OnEraseBkgnd()消息响应函数中实现
效果更好,改变窗体大小时闪烁要好些

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;     //要返回TRUE
// return CView::OnEraseBkgnd(pDC);    //这里要注释掉
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值