#include "stdafx.h" #include "common.h" void IconEdit_UndoCommand(int WndNum){ int i; BYTE *pByte; ICONEDIT_UNDOSTATE *pUndoState; pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]; i=pUndoState->NowPos-1; if(i==-1) i=MAX_ICONEDIT_UNDONUM-1; if(!pUndoState->lpData[i]){ MessageBeep(0); return; } pUndoState->NowPos=i; pByte=MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]; MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]= pUndoState->lpData[i]; pUndoState->lpData[i]=pByte; //選択フレームを消去 if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==2){ DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hSelectingBmp); MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel=0; } //再描画 DrawIconToMemBmp(WndNum,0); InvalidateRect(MdiInfo[WndNum]->MdiIconEditInfo->hMain,NULL,0); MdiInfo[WndNum]->MdiIconEditInfo->bModify=1; //メニューを有効化 ResetState_UndoMenu(); } void IconEdit_RedoCommand(int WndNum){ BYTE *pByte; ICONEDIT_UNDOSTATE *pUndoState; pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]; if(!pUndoState->lpData[pUndoState->NowPos]){ MessageBeep(0); return; } pByte=MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]; MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]= pUndoState->lpData[pUndoState->NowPos]; pUndoState->lpData[pUndoState->NowPos]=pByte; DrawIconToMemBmp(WndNum,0); InvalidateRect(MdiInfo[WndNum]->MdiIconEditInfo->hMain,NULL,0); pUndoState->NowPos++; if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0; MdiInfo[WndNum]->MdiIconEditInfo->bModify=1; ResetState_UndoMenu(); } void IconEdit_NoticeChanging(int WndNum){ extern HANDLE hHeap; int i; ICONEDIT_UNDOSTATE *pUndoState; pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]; //Redoされた場合の不要なデータを削除する for(i=pUndoState->NowPos;;i++){ if(i==MAX_ICONEDIT_UNDONUM) i=0; if(pUndoState->lpData[i]==0) break; HeapDefaultFree(pUndoState->lpData[i]); pUndoState->lpData[i]=0; } pUndoState->lpData[pUndoState->NowPos]=(BYTE *) HeapAlloc(hHeap,0,MdiInfo[WndNum]->MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]); memcpy(pUndoState->lpData[pUndoState->NowPos], MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum], MdiInfo[WndNum]->MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]); pUndoState->NowPos++; if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0; if(pUndoState->lpData[pUndoState->NowPos]){ //一番古い情報を切り捨てる HeapDefaultFree(pUndoState->lpData[pUndoState->NowPos]); pUndoState->lpData[pUndoState->NowPos]=0; } MdiInfo[WndNum]->MdiIconEditInfo->bModify=1; ResetState_UndoMenu(); }