• 締切済み

お絵かきソフトにUNDO、REDOを実装したい

始めまして、TKOZといいます。 今、WIN32APIの勉強の一環として、お絵かきソフトを作っています。 しかし、アンドゥ、リドゥをどうやって実装すればいいのか分からないです。 描画クラスは、基本的にはCreateDIBSectionを使って描画しています。 LPDWORD lpPixel;←が画像バッファです。 LPDWORD UNDOTABLE[100];これがUNDOバッファーのつもりです。 case WM_LBUTTONUP: で UNDOTABLE[CD.DrawCount]=lpPixel; CD.DrawCount++; として、 case IDM_UNDO: {//SendMessage(hWnd,EM_CANUNDO,0,0); CD.DrawCount--; if(CD.DrawCount==0)break; lpPixel=UNDOTABLE[CD.DrawCount]; InvalidateRect(hWnd,NULL,NULL); } としています。しかし、全然UNDOにならず、困っています。 誰か分かる方いましたら、よろしくお願いします。

みんなの回答

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

LPDWORDの名前自体がポインタであることを表してます。 ハンガリアン記法と言う命名規則で名前が付いてますので、 http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%82%AC%E3%83%AA%E3%82%A2%E3%83%B3%E8%A8%98%E6%B3%95 LPでポインタ、DWORDで32bit長の整数です。 lpPixelもポインタだと名前で表している訳です。 ポインタと実体の差を理解されているなら、画像バッファの内容自体の転送をC言語が UNDOTABLE[CD.DrawCount]=lpPixel; の一文で処理出来る言語ではないことが分かると思います。 >でも、何故か分かりません。 何が分からないんでしょうか?

TKOZ
質問者

お礼

ありがとうございました。無事UNDO,REDOが実装できました。 それでは失礼します。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

画像バッファの実体じゃなく、ポインタだけを保存している様に見えますが。 ポインタとポインタの指す実体の意味を理解されていないのでは?

TKOZ
質問者

補足

ポインタは一通り使えますが、LPDWORDという型を使うのが初めてなので、 よく分かりません。 ポインタは、アドレスを保存する変数ですよね? LPDWORDという型はポインタ型の変数なのですか? 知りませんでした。 ポインタなら、引数に使うポインタや、配列に使うポインタ、 関数ポインタも理解しています。でも、何故か分かりません。

関連するQ&A