还是关于那个MFC载入位图的问题

我在那种示例书上找到一段源码,可是不明白内幕,于是把它写成了一个函数来用,如下:voidjj_LoadBmp(CDC*pDC,LPTSTRfileName){CDCmem... 我在那种示例书上找到一段源码,可是不明白内幕,于是把它写成了一个函数来用,如下:
void jj_LoadBmp(CDC* pDC, LPTSTR fileName)
{
CDC memDC;
HBITMAP
hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(), fileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);
BITMAP bm;
GetObject(hbmp, sizeof(bm), &bm);
memDC.CreateCompatibleDC(pDC);
memDC.SelectObject(hbmp);
pDC->BitBlt(0, 0, bm.bmWidth, bm.bmHeight, &memDC, 0, 0, SRCCOPY);
}
粘贴时制表符和空格没了,抱歉。
然后我在ondraw中使用它,用当前设备可以用,可是用兼容设备没效果:

void C工程名View::OnDraw(CDC* pDC)
{
//默认代码
CDC memDC;
memDC.CreateCompatibleDC(pDC);
///////////////////以下是第一种情况,能够达到目的,能够输出图像到设备上
jj_LoadBmp(pDC, "123.bmp");
/////////////////////////////////////////////////////////////////
///////////////////以下是第二种情况,不能达到目的
jj_LoadBmp( &memDC, "123.bmp");
pDC->BitBlt(0, 0, 50, 50, &m_role1, 0, 0, SRCCOPY);
/////////////////////////////////////////////////////////////////////////
}
请问是怎么回事?
展开
 我来答
bhtzu
2012-07-22 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4183万
展开全部
楼上回答的没错,你没有正确理解jj_LoadBmp的代码。
加一个没有BitBlt的函数就可以了。
CSize LoadBmpToMem(CDC* memDC, LPTSTR fileName)
{
HBITMAP
hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(), fileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_DEFAULTCOLOR|LR_DEFAULTSIZE);
BITMAP bm;
GetObject(hbmp, sizeof(bm), &bm);
memDC->SelectObject(hbmp);
return CSize(bm.bmWidth, bm.bmHeight);

}
调用的时候:
CDC memDC;
memDC.CreateCompatibleDC(pDC);
CSize szBmp2 = LoadBmpToMem( &memDC, "123.bmp");

pDC->BitBlt(0, 0, szBmp2.cx, szBmp2.cy, &memDC, 0, 0, SRCCOPY);
来自:求助得到的回答
faketamendie
2012-07-22 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:140万
展开全部
后者,是对你传入的内存DC再创建一个内存DC,自然得不到图像
追问
那要怎么做呢,我现在需要先把两个位图的处理结果放在一个兼容DC中,然后才能去放到当前设备里,因为要涉及到背景色的处理,必须一个兼容DC,怎样实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式