读书人

加载bmp位图作为窗口视图背景图片出

发布时间: 2012-04-16 16:20:04 作者: rapoo

加载bmp位图作为窗口视图背景图片,出错
软件中允许用户通过子菜单选择并加载bmp位图作为窗口视图背景,我在Doc类中发消息,函数放在View类中OnEraseBkgnd函数中;执行到bitmap.GetObject(sizeof(BITMAP),&bmp); 总是出错。。。希望大家帮我看看!


BOOL CTransAM_NewView::OnEraseBkgnd(CDC* pDC)
{
//重画客户区
CBrush brush;
brush.CreateSolidBrush(BACK_COLOR);
CBrush* pOldBrush = pDC-> SelectObject(&brush);
CRect rc;
GetClientRect(&rc);
pDC-> Rectangle(&rc);
pDC-> SelectObject(pOldBrush);

//若用户加载过图片,则自动加载;
CWnd *pMainWnd = AfxGetApp()-> m_pMainWnd;
CMainFrame * pMainFrame = (CMainFrame *)pMainWnd;
CTransAM_NewDoc *pDoc = (CTransAM_NewDoc *)(pMainFrame-> GetActiveDocument());
CString MapStrPath = pDoc-> MapStrPath;
if(MapStrPath != " ")
{
CBitmap bitmap;
bitmap.LoadBitmap(MapStrPath);
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap=MemDC.SelectObject(&bitmap);
BITMAP bmp;
bitmap.GetObject(sizeof(BITMAP),&bmp);
pDC-> BitBlt(0,0,bmp.bmWidth,bmp.bmWidth,&MemDC,0,0,SRCCOPY);
}

return TRUE;
}


[解决办法]
你的bitmap.LoadBitmap有问题吧,可以试一下这样:
把要加载的位图用资源加进去,设置ID(例如:IDM_BITMAP),然后调用:
bitmap.LoadBitmap(IDM_BITMAP),试一下。
[解决办法]
bitmap.LoadBitmap(MapStrPath);
检查一下是否成功了先
[解决办法]
BOOL CLoginSystem::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CString string= "E:\\Pic\\BACKGROUND.bmp ";
HBITMAP hbitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),string,
IMAGE_BITMAP,1024,768, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
//VERY IMPORTANT:NOT CALL THE SUPER CLASS FUNCTION
CPaintDC dc(this);
if(hbitmap==NULL)
return FALSE;
CBitmap bitmap;
bitmap.Attach(hbitmap);
BITMAP bmp;
bitmap.GetBitmap(&bmp);

CDC cdc;
cdc.CreateCompatibleDC(pDC);
cdc.SelectObject(&bitmap);
pDC-> BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY);
return TRUE;
}
[解决办法]
CBitmap的LoadBitmap只能从资源加载。从磁盘加载用LoadImage

读书人网 >VC/MFC

热点推荐