これまで作成してきた簡易画像編集ソフトにはアンドゥとリドゥの機能がありませんでした。そこでアンドゥとリドゥの機能を追加します。

まず、以下のようなクラスを作成します。アンドゥまたはリドゥをするときはビットマップ情報とどの部分が範囲選択されているかを復元するため、この情報をUndoBufクラスに保存します。あとはこれをリストに格納して必要なときに取り出せばアンドゥとリドゥを実装することができます。

次にUserControlImageクラスに以下を追加します。

UndoするときはRedoできるように現在のデータをRedo用のリストに保存します。Redoするときはその逆です。また範囲選択されている状態も復元したいのでそのために必要なデータ(startPoint、endPoint)もセットします。

アンドゥバッファを追加するのはUserControlImageクラスのBitmapプロパティが変更されるときです。

それから新しいファイルが読み込まれたときはアンドゥバッファをクリアする必要があります。

あとはメニューにUndo、Redoの項目を追加して実行できるようにするだけです。