MFC基于单文档的程序读取一幅bmp图片并显示,有一些代码看不懂,求高手指教

在OnDraw函数中,有下列代码:voidCMy20143190View::OnDraw(CDC*pDC){//TODO:Addyourspecializedcodehe... 在OnDraw函数中,有下列代码:

void CMy20143190View::OnDraw(CDC* pDC)
{
// TODO: Add your specialized code here and/or call the base class

CMy20143190Doc* pDoc= GetDocument();
ASSERT_VALID(pDoc);

HBITMAP hBitmap= (HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE); // ???
m_bitmap.Detach(); // ???
m_bitmap.Attach(hBitmap); // ???

CDC dcImage;
BOOL flag=dcImage.CreateCompatibleDC(pDC); // ???
if (!flag)
{
return;
}
BITMAP bitmap;
m_bitmap.GetBitmap(&bitmap);
dcImage.SelectObject(m_bitmap);
pDC->BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcImage,0,0,SRCCOPY); // ???
}
}

}
上面的代码中,带“???”的都不是很明白,特别是1. Detach、Attach函数的作用
2.OnDraw函数已经传入一个pDC了,为什么还要定义一个 dcImage ?
3.位图显示程序,为什么要调用CreateCompatibleDC、BitBlt等函数?
4.申请的 hBitmap、m_hBitmpap、bitmap这些句柄会对象都有什么作用?他们和实际位图是怎样关联的?

问题较多,希望对这方面有了解的朋友多帮帮我\(^o^)/~
展开
 我来答
百度网友635c934
2014-03-19 · TA获得超过100个赞
知道答主
回答量:76
采纳率:0%
帮助的人:54.7万
展开全部
这是双缓冲绘图。
双缓冲绘图步骤:
1、加载图像
代码中是用的HBITMAP方式,就是下面这段。(还可以是GDI+等等)

HBITMAP hBitmap= (HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE); // ???
m_bitmap.Detach(); // ???
m_bitmap.Attach(hBitmap); // ???

2、创建内存绘图DC
CDC dcImage;
BOOL flag=dcImage.CreateCompatibleDC(pDC); 其中的dcImage就是内存DC。

3、将图像一次绘制在内存DC上。
dcImage.SelectObject(m_bitmap);

2、将内存DC的图像按尺寸绘制在窗口中。
pDC->BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,&dcImage,0,0,SRCCOPY);

建议你网上搜搜双缓冲绘图的实现。
无机冠军
2014-03-19 · 超过25用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:54.1万
展开全部
CreateCompatibleDC是创建一个兼容DC,需要定义一个DC 即dcImage。BitBlt是用DC把图贴出来,用BITMAP太麻烦,用CImage类吧!
追问
用CImage类是不是要包含stlimage.h头文件呀,但是vc6.0没有这个东西,请问可以在哪里弄到呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式