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.
The ImageList_Remove
function removes an image from an image list.
这可能就是为什么(假设)MFC 没有包装 ImageList_RemoveAll()
因为 MFC 已经有函数 DeleteImageList()
删除完整列表。
有人有一些看起来像这样的清理代码:
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.
The
ImageList_Remove
function removes an image from an image list.
这可能就是为什么(假设)MFC 没有包装 ImageList_RemoveAll()
因为 MFC 已经有函数 DeleteImageList()
删除完整列表。