LoadBitmap出错!! http://community.csdn.net/Expert/topic/5758/5758697.xml?temp=.4749872 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不清楚。但这句话可能会有所帮助:! WARNING Before you delete the object, make sure it is not selected into a device context. 是不是要加上pannel.Invalidate(); 警告的意思是,在删除pannel之前,确保它没有被选入到设备上下文环境里。第二次LoadBitmap时,应该会试图删除原来的句柄。 if(type==TYPE_OPSW_BLACK){pannel.LoadBitmap(IDB_TBOPSW_BLACK);}SetBitmap((HBITMAP)pannel);问题就是当执行完pannel.LoadBitmap(IDB_TBOPSW_BLACK)后,系统会生成一个位图IDB_TBOPSW_BLACK的句柄(用来唯一的标识该位图)并将其绑定到CBitmap对象pannel上。假设你上面的操作是在一个按钮中实现的:当你第一次点按钮时,他就会实现上面的操作,但是当你再次点按钮时就会报错因为位图已经绑定到pannel上了(这和创建按钮一样,如果按钮已经创建,你再创建就会报错)如果你想再点按钮时不报错实现位图的再次加载,那你就得在按钮操作返回前将位图句柄和pannel分离.可以用下面的两种办法:m_bmp是一个CStatic对象主要用到的就是Detach()方法,将一个对象和它所关联的句柄分离对应的还有一个Attach()将一个对象和一个对应的句柄关联起来void CTestStaticDlg::OnButton1() { if( pannel.m_hObject )//如果位图已经绑定 { pannel.Detach( );//将位图句柄和pannel分离 } pannel.LoadBitmap( IDB_BMP_DX ); m_bmp.SetBitmap( HBITMAP(bmp) );} 或者void CTestStaticDlg::OnButton1() { pannel.LoadBitmap( IDB_BMP_DX ); m_bmp.SetBitmap( HBITMAP(bmp) ); pannel.Detach( );} 我的VS2005属性窗口 事件,重写,消息都为空了,打开其他项目正常 MFC编程如何保存CHtmlEditView的内容为mht格式文件? Win7下系统服务如何广播自定义消息 如果将Socket放入线程中接收数据的话,要如何做? 菜鸟提问,望高手帮忙!在线等候结帖! 如何注册vc6 控件DIFFMRG.OCX? oracle按日期求number(10,2)型列和的SQL语句的写法。急,在线等!!!!! !!!救命!!! VC不能用了!! 不好意思,还有问题??? 答对“串口问题”的朋友请进 怎样定义对话框的长度和宽度? 武汉地区诚招VC程序员
但这句话可能会有所帮助:
! WARNING Before you delete the object, make sure it is not selected into a device context.
第二次LoadBitmap时,应该会试图删除原来的句柄。
{
pannel.LoadBitmap(IDB_TBOPSW_BLACK);
}
SetBitmap((HBITMAP)pannel);
问题就是当执行完pannel.LoadBitmap(IDB_TBOPSW_BLACK)后,系统会生成
一个位图IDB_TBOPSW_BLACK的句柄(用来唯一的标识该位图)并将其绑定到
CBitmap对象pannel上。
假设你上面的操作是在一个按钮中实现的:
当你第一次点按钮时,他就会实现上面的操作,但是当你再次点按钮时就会报错
因为位图已经绑定到pannel上了(这和创建按钮一样,如果按钮已经创建,你再创建
就会报错)如果你想再点按钮时不报错实现位图的再次加载,那你就得在按钮操作返回前
将位图句柄和pannel分离.
可以用下面的两种办法:m_bmp是一个CStatic对象
主要用到的就是Detach()方法,将一个对象和它所关联的句柄分离
对应的还有一个Attach()将一个对象和一个对应的句柄关联起来
void CTestStaticDlg::OnButton1()
{
if( pannel.m_hObject )//如果位图已经绑定
{
pannel.Detach( );//将位图句柄和pannel分离
}
pannel.LoadBitmap( IDB_BMP_DX );
m_bmp.SetBitmap( HBITMAP(bmp) );
}
或者
void CTestStaticDlg::OnButton1()
{
pannel.LoadBitmap( IDB_BMP_DX );
m_bmp.SetBitmap( HBITMAP(bmp) );
pannel.Detach( );
}