这是一个列表控件初始化程序的一部分
void CNewCrtlDlg::InitlistCrtl()
{
//沙漏光标
CWaitCursor cursor;
//清除列表控件中所有内容
If(m_ListFile.GetItemCount()!=0)
{ m_listfile.DeleteAllItems();
}
//是否有目录被选中
CString szCurPath=GetCurPath();
if(szCurPath.IsEmpty())
return;
//创健大小图像列表
CImageList* pSmallImageList=new cImageList;
CImagelist* pLargeImageList=new CImageList;
CBitmap bitmap;
pSmallImageList->Create(12,12,lLC_COLOR,2,0);
bitmap.LoadBitmap(IDB_DIRS);
pSmallImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_FILES);
pSmallImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();
pLargeImageList->Create(32,32,ILC_COLOR,2,0);
bitmap.LoadBitmap(IDB_DIRB);
pLargeImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();
bitmapLoadBitmap(IDB_FILEB);
pLargeImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();//
CImageList* pOldSmallImageList;
pOldSmallImagelist=m_listFile.SetImageList(pSmallImageList,LVSIL_SMALL);
IF(pOldSmallImageList!=NULL)
delete pOldSmallImageList;
cImageList* pOldLargeImageList;
poldLargeImagelist=m_listfile.SetimageList(pLargeImagelist,LVSIL_NORMAL);
IF(pOldLargeImageList!=NULL)
delete pOldLargeImageList;
…………………………
……
……
}
1.为什么delete pOldLargeImageList;delete pOldSmallImageList;而不是删除pSmallImageList、pLargeImageList
2.为什么bitmap.LoadBitmap(IDB_FILES);还要对其bitmap.DeleteObject(); 而CWaitCursor cursor不用去删除
void CNewCrtlDlg::InitlistCrtl()
{
//沙漏光标
CWaitCursor cursor;
//清除列表控件中所有内容
If(m_ListFile.GetItemCount()!=0)
{ m_listfile.DeleteAllItems();
}
//是否有目录被选中
CString szCurPath=GetCurPath();
if(szCurPath.IsEmpty())
return;
//创健大小图像列表
CImageList* pSmallImageList=new cImageList;
CImagelist* pLargeImageList=new CImageList;
CBitmap bitmap;
pSmallImageList->Create(12,12,lLC_COLOR,2,0);
bitmap.LoadBitmap(IDB_DIRS);
pSmallImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();
bitmap.LoadBitmap(IDB_FILES);
pSmallImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();
pLargeImageList->Create(32,32,ILC_COLOR,2,0);
bitmap.LoadBitmap(IDB_DIRB);
pLargeImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();
bitmapLoadBitmap(IDB_FILEB);
pLargeImageList->ADD(&bitmap,(COLORREF)0x000001);
bitmap.DeleteObject();//
CImageList* pOldSmallImageList;
pOldSmallImagelist=m_listFile.SetImageList(pSmallImageList,LVSIL_SMALL);
IF(pOldSmallImageList!=NULL)
delete pOldSmallImageList;
cImageList* pOldLargeImageList;
poldLargeImagelist=m_listfile.SetimageList(pLargeImagelist,LVSIL_NORMAL);
IF(pOldLargeImageList!=NULL)
delete pOldLargeImageList;
…………………………
……
……
}
1.为什么delete pOldLargeImageList;delete pOldSmallImageList;而不是删除pSmallImageList、pLargeImageList
2.为什么bitmap.LoadBitmap(IDB_FILES);还要对其bitmap.DeleteObject(); 而CWaitCursor cursor不用去删除
2.bitmap.DeleteObject(); 可加可不加,自动清除的,因为是局部的
Bitmap封装了内核对象(就是带有HANDLE的对象)内核对象不可以象指针一样操作。必须用CloseHandle等去操作,估计DeleteObject应该是一个GDIObject的一个抽象函数专门对各种GDIObject来封装删除Handle的操作。
另外内核对象是Windows中和操作系统安全直接相关的内存块(数据结构)所以为保证安全Window不使用指针而提供了一套函数来操作它们。
比如HDC等都是内核对象。
pOldImagelist是什么,为什么要删除它呢?
Bitmap封装了内核对象,就是说它不能被像delete这种简单地删除吗
pLargeImageList用的是new操作符,而pOldLargeImageList不是,却delete pOldLargeImageList
不明白