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

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

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

File size: 3.1 KB
Line 
1#include "stdafx.h"
2
3#include "common.h"
4
5void IconEdit_UndoCommand(int WndNum){
6 int i;
7 BYTE *pByte;
8 ICONEDIT_UNDOSTATE *pUndoState;
9
10 pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
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
20 pByte=MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
21 MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]=
22 pUndoState->lpData[i];
23 pUndoState->lpData[i]=pByte;
24
25 //選択フレームを消去
26 if(MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel==2){
27 DeleteObject(MdiInfo[WndNum]->MdiIconEditInfo->hSelectingBmp);
28 MdiInfo[WndNum]->MdiIconEditInfo->SelectLevel=0;
29 }
30
31 //再描画
32 DrawIconToMemBmp(WndNum,0);
33 InvalidateRect(MdiInfo[WndNum]->MdiIconEditInfo->hMain,NULL,0);
34
35 MdiInfo[WndNum]->MdiIconEditInfo->bModify=1;
36
37 //メニューを有効化
38 ResetState_UndoMenu();
39}
40void IconEdit_RedoCommand(int WndNum){
41 BYTE *pByte;
42 ICONEDIT_UNDOSTATE *pUndoState;
43
44 pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
45
46 if(!pUndoState->lpData[pUndoState->NowPos]){
47 MessageBeep(0);
48 return;
49 }
50
51 pByte=MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
52 MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]=
53 pUndoState->lpData[pUndoState->NowPos];
54 pUndoState->lpData[pUndoState->NowPos]=pByte;
55
56 DrawIconToMemBmp(WndNum,0);
57 InvalidateRect(MdiInfo[WndNum]->MdiIconEditInfo->hMain,NULL,0);
58
59 pUndoState->NowPos++;
60 if(pUndoState->NowPos==MAX_ICONEDIT_UNDONUM) pUndoState->NowPos=0;
61
62 MdiInfo[WndNum]->MdiIconEditInfo->bModify=1;
63
64 ResetState_UndoMenu();
65}
66void IconEdit_NoticeChanging(int WndNum){
67 extern HANDLE hHeap;
68 int i;
69 ICONEDIT_UNDOSTATE *pUndoState;
70
71 pUndoState=&MdiInfo[WndNum]->MdiIconEditInfo->undo[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum];
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 *)
82 HeapAlloc(hHeap,0,MdiInfo[WndNum]->MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]);
83
84 memcpy(pUndoState->lpData[pUndoState->NowPos],
85 MdiInfo[WndNum]->MdiIconEditInfo->pIconImage[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum],
86 MdiInfo[WndNum]->MdiIconEditInfo->dwBytesInRes[MdiInfo[WndNum]->MdiIconEditInfo->SelectIconNum]);
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
96 MdiInfo[WndNum]->MdiIconEditInfo->bModify=1;
97
98 ResetState_UndoMenu();
99}
Note: See TracBrowser for help on using the repository browser.