source: dev/trunk/ab5.0/abdev/abdev/IconEditor_UndoRedo.cpp@ 681

Last change on this file since 681 was 629, checked in by dai_9181, 16 years ago

MDIINFO構造体をリファクタリング。

File size: 3.1 KB
RevLine 
[475]1#include "stdafx.h"
2
[3]3#include "common.h"
4
5void IconEdit_UndoCommand(int WndNum){
6 int i;
7 BYTE *pByte;
8 ICONEDIT_UNDOSTATE *pUndoState;
9
[629]10 pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
[3]11
12 i=pUndoState->NowPos-1;
13 if(i==-1) i=MAX_ICONEDIT_UNDONUM-1;
14 if(!pUndoState->lpData[i]){
15 MessageBeep(0);
16 return;
17 }
18 pUndoState->NowPos=i;
19
[629]20 pByte=MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
21 MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]=
[3]22 pUndoState->lpData[i];
23 pUndoState->lpData[i]=pByte;
24
25 //選択フレームを消去
[629]26 if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==2){
27 DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hSelectingBmp);
28 MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel=0;
[3]29 }
30
31 //再描画
32 DrawIconToMemBmp(WndNum,0);
[629]33 InvalidateRect(MdiInfo[WndNum]->MdiIconEditInfo->hMain,NULL,0);
[3]34
[629]35 MdiInfo[WndNum]->MdiIconEditInfo->bModify=1;
[3]36
37 //メニューを有効化
38 ResetState_UndoMenu();
39}
40void IconEdit_RedoCommand(int WndNum){
41 BYTE *pByte;
42 ICONEDIT_UNDOSTATE *pUndoState;
43
[629]44 pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
[3]45
46 if(!pUndoState->lpData[pUndoState->NowPos]){
47 MessageBeep(0);
48 return;
49 }
50
[629]51 pByte=MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
52 MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]=
[3]53 pUndoState->lpData[pUndoState->NowPos];
54 pUndoState->lpData[pUndoState->NowPos]=pByte;
55
56 DrawIconToMemBmp(WndNum,0);
[629]57 InvalidateRect(MdiInfo[WndNum]->MdiIconEditInfo->hMain,NULL,0);
[3]58
59 pUndoState->NowPos++;
60 if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0;
61
[629]62 MdiInfo[WndNum]->MdiIconEditInfo->bModify=1;
[3]63
64 ResetState_UndoMenu();
65}
66void IconEdit_NoticeChanging(int WndNum){
67 extern HANDLE hHeap;
68 int i;
69 ICONEDIT_UNDOSTATE *pUndoState;
70
[629]71 pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
[3]72
73 //Redoされた場合の不要なデータを削除する
74 for(i=pUndoState->NowPos;;i++){
75 if(i==MAX_ICONEDIT_UNDONUM) i=0;
76 if(pUndoState->lpData[i]==0) break;
77 HeapDefaultFree(pUndoState->lpData[i]);
78 pUndoState->lpData[i]=0;
79 }
80
81 pUndoState->lpData[pUndoState->NowPos]=(BYTE *)
[629]82 HeapAlloc(hHeap,0,MdiInfo[WndNum]->MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]);
[3]83
84 memcpy(pUndoState->lpData[pUndoState->NowPos],
[629]85 MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum],
86 MdiInfo[WndNum]->MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]);
[3]87
88 pUndoState->NowPos++;
89 if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0;
90 if(pUndoState->lpData[pUndoState->NowPos]){
91 //一番古い情報を切り捨てる
92 HeapDefaultFree(pUndoState->lpData[pUndoState->NowPos]);
93 pUndoState->lpData[pUndoState->NowPos]=0;
94 }
95
[629]96 MdiInfo[WndNum]->MdiIconEditInfo->bModify=1;
[3]97
98 ResetState_UndoMenu();
99}
Note: See TracBrowser for help on using the repository browser.