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, 15 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.