「これはヤバかったな」という遅刻エピソード

始めまして、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にならず、困っています。
誰か分かる方いましたら、よろしくお願いします。

A 回答 (2件)

LPDWORDの名前自体がポインタであることを表してます。


ハンガリアン記法と言う命名規則で名前が付いてますので、
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3% …
LPでポインタ、DWORDで32bit長の整数です。
lpPixelもポインタだと名前で表している訳です。

ポインタと実体の差を理解されているなら、画像バッファの内容自体の転送をC言語が
UNDOTABLE[CD.DrawCount]=lpPixel;
の一文で処理出来る言語ではないことが分かると思います。

>でも、何故か分かりません。
何が分からないんでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/01/09 21:34

画像バッファの実体じゃなく、ポインタだけを保存している様に見えますが。


ポインタとポインタの指す実体の意味を理解されていないのでは?

この回答への補足

ポインタは一通り使えますが、LPDWORDという型を使うのが初めてなので、
よく分かりません。

ポインタは、アドレスを保存する変数ですよね?
LPDWORDという型はポインタ型の変数なのですか?
知りませんでした。

ポインタなら、引数に使うポインタや、配列に使うポインタ、
関数ポインタも理解しています。でも、何故か分かりません。

補足日時:2010/01/09 20:26
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報