void CPictureWnd::SetBitmap(UINT uBmpResource, UINT uCtrlResource)
{
//--加载图片的函数
HBITMAP hBitmap;
CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource); hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(uBmpResource),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS); pStatic->ModifyStyle(0xF, SS_BITMAP);
pStatic->SetBitmap(hBitmap);
} 我用这个函数加载bmp图片,为什么有时偶尔加载空了,什么也没有,程序重启后就好了,这是为什么了?
{
//--加载图片的函数
HBITMAP hBitmap;
CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource); hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(uBmpResource),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS); pStatic->ModifyStyle(0xF, SS_BITMAP);
pStatic->SetBitmap(hBitmap);
} 我用这个函数加载bmp图片,为什么有时偶尔加载空了,什么也没有,程序重启后就好了,这是为什么了?
解决方案 »
- RICHEDIT中的语法高亮怎样支持中文(UNICODE)
- 动态插入OCX控件问题
- VC ADO 远程访问 sql server 问题
- 在WinXP运行得好好的程序,到了Win2K下出现"无法定位程序输入点getaddrinfo于动态链接库WS2_32.dll上"的错误
- 请问cview中的PreCreateWindow和CFrameWnd中的PreCreateWindow有什么区别?
- 用VC做底层开发需要哪些API函数?DeviceIoControl这个API函数包不包括在内?
- 求助有关winpcap的问题
- 请问编译时出现这种错误是什么原因?
- 请各位谈谈到底什么是“三层架构”程序设计?
- 向一切能給我提示的人來教我(問題簡單)
- 程序一启动怎样使定义的tooltips显示出来,并一直保持在界面上?
- CEdt控件响应回车字符
2、没必要每次都加载,因为很可能你会多次反复load某几个位图资源。完全可以做一个list保存已经加载过的位图句柄。或者你可以每次加载位图之后,DeleteObject释放资源。
rect.NormalizeRect();
InvalidateRect(rect,true);1、是你对指针和位图句柄的合法性都没有进行过判断 这个怎么讲了?
CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource); hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(uBmpResource),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS);
if( hBitmap && pStatic)
{
pStatic->ModifyStyle(0xF, SS_BITMAP);
pStatic->SetBitmap(hBitmap);
} 这样做一下处理就没问题了吧
我这里就是多次反复加载几个位图资源,没有DeleteObject释放资源,会是这个导致加载失败吗?
2. CPen pen;
pen.CreatePen(m_stytle,m_width,col);//需要调用DeleteObject(). 那我这样做就不需要DeleteObject()了不是吗?
{
CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource);
HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(uBmpResource),
IMAGE_BITMAP,
0,
0,
LR_LOADMAP3DCOLORS);
pStatic->ModifyStyle(SS_TYPEMASK, SS_BITMAP);
DeleteObject(pStatic->SetBitmap(hBitmap));
}CPen类不用DeleteObject,是因为CPen类在析构的时候会自动删除对象。
每次加载之前: //--先释放先前加载的位图资源
if( hBitmap != NULL )
DeleteObject(hBitmap);
那种加载为空的现象没有了,呵呵
谢谢各位,又学到了不少的东西啊