テキストエディタのundo redo

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
やす

テキストエディタのundo redo

#1

投稿記事 by やす » 9年前

自前の計算ソフトの入力に、自前でテキストエディタを実装しています。
VC_Expressにて実装中

コード:

			case  IDM_UNDO: //元に戻る(&Z)
				SendMessage(hEdit,WM_UNDO,0,0);
				break;
			case  IDM_REDO: //やり直し(&Y)
//				SendMessage(hEdit,EM_REDO,0,0);
				break;

とundoをやっていますが、
複数回のundoには対応していません。
対応させたいのですが、ネット上を探索すると
テキストボックス内の文字の全文字を保存し、
undoにて保存文字を現在の文字で置き換える
ような形の様な気がします。

今作っているエディタの使用における文字数は
複数行にわたりますが、大した量ではないと思います(200行もいかないかも)
しかし、世に有名なテキストエディタでは恐ろしい行のデータに対応させるため、
たぶんですが、全文字を保存しているようには思えません。

期待したいご回答ですが、
こういうパターンがあるよ
などのご意見を頂きたい次第です。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: テキストエディタのundo redo

#2

投稿記事 by h2so5 » 9年前

データが大きい場合は圧縮するとか、差分だけ保存するとかしておけばいいと思います。

hatena

Re: テキストエディタのundo redo

#3

投稿記事 by hatena » 9年前

編集履歴を保存しているのだと思います。

選択開始位置 選択文字列 挿入文字列

を配列にでも入れておいて、UnDoするときに逆操作をするようにすればいいでしょう。

挿入
選択開始位置 選択文字列 挿入文字列
1 "" "ABC"

undo は、開始位置から挿入文字列の長さ分削除

削除
選択開始位置 選択文字列 挿入文字列
1 "ABC" ""

undo は、開始位置に選択文字列を挿入


置換
選択開始位置 選択文字列 挿入文字列
1 "ABC" "CDF"

undo は、開始位置から挿入文字列の長さ分削除してから、選択文字列を挿入

やす

Re: テキストエディタのundo redo

#4

投稿記事 by やす » 9年前

レス大変おそくなりました。すみません。

やはり、そのような実装をこらしているのですね。

OSもしくはライブラリにAPIがあって実装を省略しているのかなと思っていました。

レス感謝します。

閉鎖

“C言語何でも質問掲示板” へ戻る