问题"重做/撤消"函数(mfc,c ++)

时间:2016-09-19 14:30:49

标签: c++ visual-studio mfc undo-redo

我试图在我的mfc应用程序中创建重做/撤消功能,但是当我试图撤消CLine对象时 - 它无法正常工作。我做错了什么?抱歉我的英文!

enter image description here

void CKonokhovDoc::OnEditUndo()
{
// TODO: Add your command handler code here
int Index = (int)m_LineArray.GetUpperBound();
int Index2 = (int)m_LineArray_redo.GetUpperBound();
if (Index>-1){
    redoLine = m_LineArray.GetAt(Index);
    m_LineArray_redo.SetAt(Index2+1,redoLine);
    m_LineArray.RemoveAt(Index);
 }
UpdateAllViews(0);
SetModifiedFlag();
}


void CKonokhovDoc::OnUpdateEditUndo(CCmdUI *pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable((int)m_LineArray.GetSize());

}


void CKonokhovDoc::OnEditRedo()
{
// TODO: Add your command handler code here
int Index = (int)m_LineArray.GetUpperBound();
int Index2 = (int)m_LineArray_redo.GetUpperBound();
m_LineArray.SetAt(Index+1, m_LineArray_redo.GetAt(Index2));
m_LineArray_redo.RemoveAt(Index2);
//redoLine = NULL;
UpdateAllViews(0);
SetModifiedFlag();
}

1 个答案:

答案 0 :(得分:1)

如前所述,SetAt访问了一个越界索引,导致VS的断言调用。随着数组的扩展,使用Add自然地解决了这个问题。

<子> This was mentioned by the OP