擴展Edit Box控件的功能(二)

擴展Edit Box控件的功能(二)

ID:38787617

大?。?9.15 KB

頁數(shù):12頁

時間:2019-06-19

擴展Edit Box控件的功能(二)_第1頁
擴展Edit Box控件的功能(二)_第2頁
擴展Edit Box控件的功能(二)_第3頁
擴展Edit Box控件的功能(二)_第4頁
擴展Edit Box控件的功能(二)_第5頁
資源描述:

《擴展Edit Box控件的功能(二)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。

1、六、多重UnDo/ReDo功能:EditBox控件提供了UnDo功能,但只能撤銷一次操作,要想實現(xiàn)多重UnDo/ReDo功能需要自己設計。UnDo:撤銷上一次修改操作,實現(xiàn)時應保存最近幾次修改。ReDo:重做上一次撤銷的操作,如果你撤銷后后悔了,就ReDo吧。1、數(shù)據(jù)結(jié)構利用一個結(jié)構數(shù)組作為棧保存最近幾次修改操作,定義如下:#define?UNDOMAX????????30????//棧深度(最大Undo次數(shù))//可撤銷的操作名#define?OP_DELSEL?????1?????//刪除選擇(剪切)#defin

2、e?OP_REPLACE????2?????//替換選擇#define?OP_DELETE?????3?????//刪除#define?OP_BACK???????4?????//Backspace#define?OP_INPUT??????5?????//輸入//Undo/Redo棧結(jié)構typedef?struct{????int???op;????????//操作名????int???pos;???????//操作的位置????CString?str1;????//舊內(nèi)容????CString?str2;???

3、?//新內(nèi)容}STACKNODE;private:????STACKNODE?m_Stack[UNDOMAX];?????//工作棧????int?utop;??????????//Undo棧頂指針????int?ubottom;???????//Undo棧底指針????int?rtop;??????????//Redo棧頂指針????int?rbottom;???????//Redo棧底指針????BOOL?b_DelFlag;????//刪除標志UNDOMAX是預定義的棧深度,這里定義為30,表示可撤銷最近的3

4、0步操作。STACKNODE結(jié)構用來定義棧節(jié)點,對每一次修改操作,需要紀錄修改的位置,修改前的內(nèi)容和修改后的內(nèi)容。而且不同的修改操作在撤銷時會略有不同,所以還需紀錄修改操作名。所有修改可歸結(jié)為5種:OP_DELSEL:刪除選擇的文本,此時str1保存被刪除的文本,str2為空;OP_REPLACE:替換選擇的文本,str1為被換掉的文本,str2為新文本;OP_DELETE:用Del鍵刪除文本,str1保存被刪除的文本,str2為空;OP_BACK:用BackSpace鍵刪除文本,str1保存被刪除的文本,str2

5、為空;OP_INPUT:鍵盤輸入新文本,str1為空,str2為新輸入的文本。其它的操作都可歸納到這5種之內(nèi),如剪切就是OP_DELSEL,粘貼就是OP_REPLACE。m_Stack是長度為UNDOMAX的棧,它既是UnDo棧,也是ReDo棧,棧指針utop、ubottom確定UnDo棧位置,rtop、rbottom確定ReDo棧位置。2、棧操作①初始化工作棧void?CEditBox::InitStack(){????for(?int?i=0;?i

6、?????m_Stack[i].op?=?-1;????????m_Stack[i].str1?=?_T("");????????m_Stack[i].str2?=?_T("");????}????utop?=?0;????????//棧指針????ubottom?=?0;????rtop?=?0;????rbottom?=?0;}②入棧void?CEditBox::Push(STACKNODE?*pNode){????utop?=?(utop+1)%UNDOMAX;????//修改棧頂指針????rtop?=?u

7、top;????????????????//清空Redo棧????rbottom?=?utop;????if(?utop==ubottom?)????????????//如果棧滿????????ubottom?=?(ubottom+1)%UNDOMAX;????//修改棧底指針????m_Stack[utop]?=?*pNode;????????//入棧}每次修改操作時,把紀錄修改的節(jié)點推入棧中。棧采用環(huán)形結(jié)構,當棧滿時,新入棧的節(jié)點覆蓋棧底節(jié)點,也就淘汰了最早進入棧內(nèi)節(jié)點。③UnDo出棧STACKNODE?*CE

8、ditBox::UnDoPop(){????if(?utop==ubottom?)????????//??????????return?NULL;????STACKNODE?*p?=?&m_Stack[utop];????rtop?=?utop;??????????????//Redo入棧????utop?=?utop-1;????????????//退棧?

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。