注册 登录
编程论坛 VC++/MFC

不显示删除回复显示所有回复显示星级回复显示得分回复 mfc collection Classes中怎样实现查询、修改、删除指定元素的功能

wwwjw 发布于 2011-01-06 19:30, 705 次点击
侯捷的深入浅出一书中,有一点涉及到删除功能,不过他是全部删除,实现代码:
void CScribbleDoc::DeleteContents()  
{
while (!m_strokeList.IsEmpty())
{
delete m_strokeList.RemoveHead();
}
CDocument::DeleteContents();
}

m_strokeList在文档类中的定义:
 CTypedPtrList<CObList,CStroke*> m_strokeList;

从链表的头部依次往尾部删除,他是通过判断链表是否为空来知道是否达到全部删除的目的。

但是如果我只想删除、修改指定的元素呢,我的想法是在元素中安插一个识别标志,到时候查询的时候,根据这个识别标志找到欲修改、删除的元素,然后删除、修改它。
我写了一些代码,把它放在view的右击函数里面,可总是出错,不知道问题在哪:
POSITION pos1;
CScribbleDoc *pDoc=GetDocument();
    for (pos1=pDoc->m_strokeList.GetHeadPosition(); (pos2 = pos1) != NULL;)
{
………………
}
中间本应有代码,但是我发现即使其中没有代码,运行也出错(编译无错)
具体该怎么实现呢?mfc中又是否有相应的函数?求高人指点!!
2 回复
#2
wwwjw2011-01-06 19:37
其实最困难的就是通过查询,找到对应链表元素的pos
#3
wwwjw2011-01-06 19:41
public:
        UINT                   m_nPenWidth;    // one pen width applies to entire stroke
public:
        CArray<CPoint,CPoint>  m_pointArray;   // series of connected points
这是链表元素中的内容,我打算通过
pDoc->m_strokeList.GetAt(pos1)->m_nPenWidth==5这种条件来获取pos,可是却不行!
1