アンドゥ・リドゥ専用スタッククラス CUndoStack 概要 作業中のデータを随時退避させておいて 必要に応じてアンドゥ・リドゥでそのデータを取り出すことの出来るスタック クラスはtemplateで宣言しているのでどんなデータ型にでも使えます 使い方 CUndoStack.hをインクルードするだけ。事前にwindows.h程度はインクルード しておいてください。 CUndoStack stack(100); というように宣言すればint型の100回アンドゥできるスタックの完成です。 作業データをアンドゥスタックに退避させたい場合は SetData(100); SetData(&data); のようにしてください。実数渡しでもポインタ渡しでもできます。 int型とかは実数で渡して、構造体とかクラスとかはポインタで渡しておくと いいかもしれません アンドゥ時やリドゥ時は Undo(); Redo(); でデータを取得できます。こいつもSetDataと同じような感じで引数からポインタで 返したり、戻り値として実数返しもできます。 何回もUndo()やRedo()すればアンドゥスタック内を可能な限り自由に移動できます。 アンドゥ・リドゥできるかどうかは IsEnableUndo(); IsEnableRedo(); で取得できます(戻り値はbool) ちなみに僕が以前作った「マリサペイント」というマップエディタでは マップ読み込み時に // アンドゥ用のデータ struct UNDO_DATA{ BYTE cMapData[MAX_MAP_Y][MAX_MAP_X]; }; UndoStack.Init(nMaxUndo); // nMaxUndoは最大アンドゥ回数 UNDO_DATA data; memcpy(data.cMapData, cMapData, sizeof(cMapData)); UndoStack.SetData(&data); というように初期データをセットしておて、何か編集するたびに UNDO_DATA data; memcpy(data.cMapData, cMapData, sizeof(cMapData)); UndoStack.SetData(&data); でその時点でのマップデータを格納してました。 使用に関して この程度のドキュメントで分かるのならご自由にどうぞ