´Ù. ·¹ÄÚµå ÃʱâÈ­

Ãë¼Ò ·¹ÄÚµåÀÇ Å¸ÀÔÀº Á¤ÀÇÇß°í ´ÙÀ½Àº ÀÌ ·¹Äڵ带 °ü¸®Çϱâ À§ÇÑ º¯¼ö¸¦ Ãß°¡Çϵµ·Ï ÇÏÀÚ. ´ÙÀ½ ¼¼ °³ÀÇ º¯¼ö¸¦ 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À» ÇØÁ¦ÇÏ´Â ÄÚµå¿Í µ¿ÀÏÇÏ¸ç º°µµÀÇ ÇÔ¼ö·Î ºÐ¸®ÇÒ ¼öµµ ÀÖ´Ù.