Ãë¼Ò ·¹ÄÚµåÀÇ Å¸ÀÔÀº Á¤ÀÇÇß°í ´ÙÀ½Àº ÀÌ ·¹Äڵ带 °ü¸®Çϱâ À§ÇÑ º¯¼ö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ. ´ÙÀ½ ¼¼ °³ÀÇ º¯¼ö¸¦ CApiEdit Ŭ·¡½º¿¡ ¼±¾ðÇÏ¿© ¸â¹ö·Î Æ÷ÇÔ½ÃŲ´Ù.
class CApiEdit
{
....
UndoRecord *pUR;
int URSize;
int nowur;
ÆíÁý µ¿ÀÛ Çϳª¿¡ ´ëÇØ ÇϳªÀÇ Ãë¼Ò ·¹Äڵ尡 ÇÊ¿äÇϸç ÆíÁýÀº ¿¬¼ÓÀûÀ¸·Î ÀÌ·ç¾îÁö¹Ç·Î ¹è¿À» ±¸¼ºÇØ¾ß ÇÑ´Ù. ¹è¿ÀÇ Å©±â¸¦ ¹Ì¸® Á¤ÇÒ ¼ö ¾øÀ¸¹Ç·Î ÀÏ´Ü Æ÷ÀÎÅÍ º¯¼ö pURÀ» ¼±¾ðÇÏ°í ÀÌ Æ÷ÀÎÅÍ¿¡ ¹è¿À» ÇÒ´çÇÏ¿© »ç¿ëÇÒ °ÍÀÌ´Ù. ÆíÁý µ¿ÀÛÀÌ ¸¹¾ÆÁö¸é ½ÇÇàÁß¿¡ ¹è¿Å©±â¸¦ ´Ã·Á¾ß ÇϹǷΠÇÒ´çµÈ Å©±â¸¦ URSize¿¡ ÀúÀåÇÑ´Ù.
nowurÀº ÇöÀç ±â·ÏÇÏ°í ÀÖ´Â ·¹ÄÚµå ¹è¿ÀÇ Ã·ÀÚÀ̸ç ÀÌ ·¹Äڵ带 ÇöÀç ·¹ÄÚµå¶ó°í ÇÑ´Ù. ÇöÀç ·¹ÄÚµåÀÇ Á¤È®ÇÑ ¼º°ÝÀ» ±ÔÁ¤ÇÏ´Â °ÍÀº »ó´çÈ÷ ¾î·Á¿î ÀÏÀε¥ nowurÀº Áö±Ý ÀÛ¼ºÁßÀÎ ·¹ÄÚµå ¶Ç´Â ¹æ±Ý Ãë¼ÒÇÑ ·¹ÄÚµå·Î Á¤ÀÇÇÏ¿´´Ù. ´ÙÀ½ ÀÛ¼ºÇÒ ·¹Äڵ尡 ¾Æ´Ï°í ´ÙÀ½ Ãë¼ÒÇÒ ·¹Äڵ带 °¡¸®Å°´Â °Íµµ ¾Æ´Ï¸ç Ç×»ó ÇöÀç »ç¿ëÇÏ°í ÀÖ´Â ·¹Äڵ带 °¡¸®Å²´Ù. ÀÌ º¯¼ö¸¦ ¾î¶»°Ô Á¤ÀÇÇϴ°¡¿¡ µû¶ó ±â·Ï ÈÄ ·¹Äڵ带 À̵¿ÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é ·¹Äڵ带 ¸ÕÀú À̵¿ÇÏ°í ±â·ÏÀ» ÇÒ °ÍÀΰ¡ÀÇ ¹Ì¹¦ÇÑ Â÷ÀÌ°¡ ¹ß»ýÇÏ°Ô µÈ´Ù. »ý¼ºÀÚ¿¡¼ ÀÏ´Ü pURÀ» NULL·Î ÃʱâÈÇÑ´Ù.
CApiEdit::CApiEdit()
{
....
pUR=NULL;
}
µ¿ÀûÀ¸·Î ÇÒ´çµÇ´Â ¹è¿À̱⠶§¹®¿¡ óÀ½ºÎÅÍ NULLÀ̾î¾ß ÇÏ¸ç »ý¼ºÀÚ¿¡¼ ¾²·¹±â°ªÀ» ¾ø¾Ö±â À§ÇØ NULL·Î ÃʱâÈÇß´Ù. ÀÌ º¯¼ö¸¦ ÀǹÌÀÖ´Â °ªÀ¸·Î ÃʱâÈÇÏ´Â ÀÏÀº ¹®¼°¡ óÀ½ ÀÛ¼ºµÉ ¶§ÀÎ InitDoc¿¡¼ ÇØ¾ß ÇÑ´Ù. InitDoc¿¡¼ Ãʱâȸ¦ ÇϹǷΠWM_CREATE¿¡¼´Â µû·Î Ãʱâȸ¦ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
void CApiEdit::InitDoc()
{
if (pUR) {
for (i=0;;i++) {
if (pUR[i].action == UR_NONE)
break;
if (pUR[i].data)
free(pUR[i].data);
}
free(pUR);
}
URSize=100;
pUR=(UndoRecord *)malloc(sizeof(UndoRecord)*URSize);
memset(pUR,0,sizeof(UndoRecord)*URSize);
nowur=0;
....
¹®¼ »ç¿ëÁß¿¡ ÀçÃʱâȸ¦ ÇÏ´Â °æ¿ìµµ ÀÖÀ¸¹Ç·Î pUR ¹è¿ÀÌ ÀÌ¹Ì ÇÒ´çµÇ¾î ÀÖÀ¸¸é ÇÒ´çÀ» Ãë¼ÒÇÑ´Ù. À̶§ ·¹ÄÚµåÀÇ ¸â¹öÀÎ dataµµ ÇÒ´çÀ» Ãë¼ÒÇØ¾ß ÇÑ´Ù. ·¹ÄÚµåÀÇ Ãʱâ Å©±â´Â 100À¸·Î Àâ¾ÒÀ¸¸ç ÀÌ Å©±â¸¸Å ¹è¿À» ÇÒ´çÇÑ´Ù. ÆíÁýÁß¿¡ ´õ ÇÊ¿äÇϸé ÀÌ Å©±â´Â µ¿ÀûÀ¸·Î ´Ã¾î³ª°Ô µÈ´Ù. data ¸â¹ö´Â ·¹ÄÚµå ÇÒ´ç½Ã¿¡ °°ÀÌ ÇÒ´çÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ·¹Äڵ忡 ±â·ÏÇϱâ Á÷Àü¿¡ ÇÊ¿äÇÑ Å©±â¸¸Å ÇÒ´çÇÑ´Ù. ApiEdit°¡ Æı«µÇ±â Á÷Àü¿¡ ¸ðµç Ãë¼Ò ·¹ÄÚµåµéÀº ÇØÁ¦µÇ¾î¾ß Çϴµ¥ OnDestroy¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.
void CApiEdit::OnDestroy(HWND hWnd)
{
....
if (pUR) {
for (int i=0;;i++) {
if (pUR[i].action == UR_NONE)
break;
if (pUR[i].data)
free(pUR[i].data);
}
free(pUR);
}
}
InitDoc¿¡¼ pURÀ» ÇØÁ¦ÇÏ´Â ÄÚµå¿Í µ¿ÀÏÇÏ¸ç º°µµÀÇ ÇÔ¼ö·Î ºÐ¸®ÇÒ ¼öµµ ÀÖ´Ù.