还是关于那个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);
/////////////////////////////////////////////////////////////////////////
}
请问是怎么回事? 展开
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);
/////////////////////////////////////////////////////////////////////////
}
请问是怎么回事? 展开
2个回答
展开全部
楼上回答的没错,你没有正确理解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);
加一个没有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);
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询