MFC CImageList DeleteImageList() 与 Remove()

MFC CImageList DeleteImageList() vs Remove()

有人有一些看起来像这样的清理代码:

for (int i = 0; i < m_pDragImage->GetImageCount();i++) {
  m_pDragImage->Remove(i);
}
m_pDragImage->DeleteImageList();
delete m_pDragImage;

现在我知道删除循环是错误的,应该是:

for (int i = 0; i < m_pDragImage->GetImageCount();) {
  if (!m_pDragImage->Remove(i)) {
    i++;
  }
}

但现在的问题是,Remove() 循环中的所有内容与调用 DeleteImageList() 之间有什么区别?按照我的理解,当你 Add() 某些东西时,它只是保存它的位图表示,这样你就可以在 Add() 之后销毁句柄。所以对我来说,Remove() 似乎可以自行清理所有内容,所以不确定在那种情况下是否需要 DeleteImageList()?或者更好的是,不用担心循环而只使用 DeleteImageList(),或者更好的是,对象在销毁时执行它?

TIA!!

DeleteImageList()Remove() 每个元素都在做同样的事情。

CImageList::Remove()CImageList::DeleteImageList()分别调用ImageList_Remove();ImageList_Destroy()WinAPI函数。

根据Creating and Destroying Image Lists

When you no longer need an image list, you can destroy it by specifying its handle in a call to the ImageList_Destroy function.

Adding and Removing Images

The ImageList_Remove function removes an image from an image list.

这可能就是为什么(假设)MFC 没有包装 ImageList_RemoveAll() 因为 MFC 已经有函数 DeleteImageList() 删除完整列表。