首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

加载bmp位图作为窗口视图背景图片,出错,该怎么处理

2012-04-16 
加载bmp位图作为窗口视图背景图片,出错软件中允许用户通过子菜单选择并加载bmp位图作为窗口视图背景,我在D

加载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

热点排行