°¡.ºñÆ®¸Ê Ãß°¡

ApiDraw09 ÇÁ·ÎÁ§Æ®¿¡¼­´Â Ÿ¿øÀ̳ª »ç°¢Çüº¸´Ù ÈξÀ ´õ º¹ÀâÇÑ ¸ð¾çÀÇ °´Ã¼µéÀ» Ãß°¡ÇØ º¸±â·Î ÇÑ´Ù. ÀÌ ½Ç½À¿¡¼­ Ãß°¡ÇÒ °´Ã¼´Â ÅؽºÆ®, ºñÆ®¸Ê, ¸ÞŸ ÆÄÀÏÀε¥ ÀÌ °´Ã¼µéÀÌ ±âº» µµÇü°ú ±Ùº»ÀûÀ¸·Î ´Ù¸¥ Â÷ÀÌÁ¡Àº ±æÀ̸¦ ¿¹ÃøÇÒ ¼ö ¾ø´Ù´Â Á¡ÀÌ´Ù. ÅؽºÆ®´Â ¾ó¸¶µçÁö ±æ¾îÁú ¼ö ÀÖÀ¸¹Ç·Î Á¤ÀûÀÎ ¹®ÀÚÇü ¹è¿­·Î´Â °ü¸®ÇÒ ¼ö ¾øÀ¸¸ç ½ÇÇàÁß¿¡ »ç¿ëÀÚ°¡ ÀÔ·ÂÇÑ ±æÀ̸¸Å­ ¸Þ¸ð¸®¸¦ ÇÒ´çÇØ¾ß ÇÑ´Ù. ºñÆ®¸ÊÀ̳ª ¸ÞŸ ÆÄÀϵµ ¸¶Âù°¡Áö·Î »ðÀԵǴ ±×¸² ÆÄÀÏÀÇ Å©±â¸¦ ¿¹ÃøÇϰųª Á¦ÇÑÇÒ ¼ö ¾ø´Ù.

ÇÁ·Î±×·¡¹ÖÀÇ ¼¼°è¿¡¼­ ¿¹ÃøÇÒ ¼ö ¾ø´Ù´Â »óȲÀº Äڵ尡 º¹ÀâÇØÁ®¾ß ÇÑ´Ù´Â ¾ê±â(=°ñ¶§¸°´Ù)¿Í °ÅÀÇ °°´Ù. Á¶»çµÈ ±æÀ̸¸Å­ µ¿ÀûÇÒ´çÀ» ÇØ¾ß ÇÏ¸ç °á±¹ Ãʺ¸ÀÚµéÀÌ µÎ·Á¿öÇÏ´Â Æ÷ÀÎÅÍ°¡ µîÀåÇØ¾ß ÇÑ´Ù´Â ¶æÀÌ´Ù. ÀÌ ¼¼ Á¾·ùÀÇ °´Ã¼¸¦ ´Ù·ç±â À§ÇØ DObject ±¸Á¶Ã¼¿¡ Ãß°¡µÇ¾î¾ß ÇÒ ¸â¹ö´Â Æ÷ÀÎÅÍ º¯¼ö¿Í ÇÒ´çµÈ ±æÀÌÀÌ´Ù. ±×¸®°í ÅؽºÆ®ÀÇ °æ¿ì´Â ±Û²ÃÀÇ ¸ð¾ç°ú Å©±â¸¦ ÁöÁ¤ÇÒ ¼ö ÀÖ´Â º°µµÀÇ ¸â¹ö¸¦ ´õ °¡Á®¾ß ÇÑ´Ù. DObject ±¸Á¶Ã¼¸¦ ´ÙÀ½°ú °°ÀÌ È®ÀåÇÑ´Ù.

 

struct DObject

{

   DTool Type;

   RECT rt;

   unsigned short Flag;

   short LineWidth;

   COLORREF LineColor;

   COLORREF PlaneColor;

   union {

      TCHAR *Text;

      BYTE *Bitmap;

      BYTE *Meta;

   };

   int Len;

   COLORREF FontColor;

   TCHAR FontFace[32];

   int FontSize;

};

 

ÅؽºÆ®, ºñÆ®¸Ê, ¸ÞŸ ÆÄÀÏÀ» À§ÇÑ ¸â¹ö´Â ¸ðµÎ µ¿ÀûÇÒ´çµÈ ¹øÁö¸¦ ÀúÀåÇÒ Æ÷ÀÎÅÍÀÌµÇ ÇÑ °´Ã¼°¡ ¼¼ °¡Áö Á¤º¸¸¦ µ¿½Ã¿¡ °¡Á®¾ß ÇÏ´Â °ÍÀº ¾Æ´Ï¹Ç·Î À̸§¾ø´Â °ø¿ëü·Î ¼±¾ðÇß´Ù. DObject °´Ã¼´Â ÅؽºÆ®³ª ºñÆ®¸Ê, ¸ÞŸ ÆÄÀÏ Áß Çϳª¸¸ µÉ ¼ö ÀÖÀ¸¹Ç·Î ¼¼ Æ÷ÀÎÅÍ ¸â¹ö°¡ °°Àº ±â¾ï Àå¼Ò¸¦ °øÀ¯Çصµ ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù. LenÀº µ¿Àû ÇÒ´çµÈ ¸Þ¸ð¸®ÀÇ Å©±âÀÌ¸ç ³ª¸ÓÁö ¸â¹öµéÀº ÅؽºÆ®ÀÇ ±Û²Ã ¼Ó¼ºµéÀÌ´Ù. DObject°¡ È®ÀåµÇ¸é Àü¿ª ¿É¼Çµµ °°ÀÌ ´Ã¾î³ª¹Ç·Î OnCreate¿¡¼­ ÀûÀýÈ÷ ÃʱâÈ­ÇØ¾ß ÇÑ´Ù.

 

LRESULT OnCreate(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   ....

   Opt.LineWidth=3;

   Opt.LineColor=RGB(0,0,0);

   Opt.PlaneColor=RGB(0,255,0);

   Opt.FontColor=RGB(0,0,0);

   Opt.FontSize=10;

   lstrcpy(Opt.FontFace,"±¼¸²");

 

ÅؽºÆ®ÀÇ ±Û²Ã ¼Ó¼ºµéÀ» ±¼¸² 10Æ÷ÀÎÆ®ÀÇ °ËÁ¤»öÀ¸·Î ÃʱâÈ­Çß´Ù. ¸ÞÀÎ ¸Þ´º¿¡¼­ »õ·Î Ãß°¡µÈ °´Ã¼µéÀÇ ÅøÀ» ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù.

 

LRESULT Main_OnCommand(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   switch(LOWORD(wParam)) {

   ....

   case IDM_SHAPE_TEXT:

      NowTool=DT_TEXT;

      break;

   case IDM_SHAPE_BITMAP:

      NowTool=DT_BITMAP;

      break;

   case IDM_SHAPE_META:

      NowTool=DT_META;

      break;

 

NowToolÀ» ´ëÀÀµÇ´Â Åø·Î ¹Ù²Ù±â¸¸ ÇÏ¸é µÈ´Ù. ¸ÞÀÎ ¸Þ´º¿¡¼­ NowToolÀ» ¹Ù²Ù´Â ¸í·É¸¸ ÀÛ¼ºÇϸé Åø¹ÙÀÇ ¹öÆ°µéµµ °°Àº ID¸¦ °¡Áö°í ÀÖÀ¸¹Ç·Î º°µµÀÇ Äڵ带 ÀÛ¼ºÇÏÁö ¾Ê¾Æµµ Åø ¹Ù·Îµµ µµ±¸¸¦ ¹Ù²Ü ¼ö ÀÖ´Ù. »Ó¸¸ ¾Æ´Ï¶ó µµ±¸°¡ ¹Ù²î¸é Åø ¹ÙÀÇ »óŵµ OnIdle¿¡ ÀÇÇØ ÀÚµ¿À¸·Î °ü¸®µÈ´Ù. ¼¼ °¡Áö °´Ã¼ Áß »ó´ëÀûÀ¸·Î °£´ÜÇÑ ºñÆ®¸ÊºÎÅÍ »ðÀÔÇØ º¸ÀÚ. ´ÙÀ½ ÇÔ¼ö´Â ÁöÁ¤ÇÑ À§Ä¡¿¡ ºñÆ®¸ÊÀ» »ðÀÔÇÑ´Ù.

 

void InsertBitmap(int x,int y)

{

   OPENFILENAME OFN;

   char lpstrFile[MAX_PATH]="";

   HANDLE hFile;

   DWORD FileSize, dwRead;

   BYTE *pBmp;

   BITMAPINFOHEADER *ih;

 

   memset(&OFN, 0, sizeof(OPENFILENAME));

   OFN.lStructSize = sizeof(OPENFILENAME);

   OFN.hwndOwner=hWndMain;

   OFN.lpstrFilter="ºñÆ®¸Ê ÆÄÀÏ\0*.bmp\0¸ðµç ÆÄÀÏ(*.*)\0*.*\0";

   OFN.lpstrFile=lpstrFile;

   OFN.nMaxFile=256;

   if (GetOpenFileName(&OFN)!=0) {

      hFile=CreateFile(lpstrFile,GENERIC_READ,0,NULL,

          OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

      if (hFile!=INVALID_HANDLE_VALUE) {

          FileSize=GetFileSize(hFile,NULL);

          pBmp=(BYTE *)malloc(FileSize);

          ReadFile(hFile,pBmp,FileSize,&dwRead,NULL);

          CloseHandle(hFile);

          if (*pBmp != 0x42 || *(pBmp+1) != 0x4d) {

             free(pBmp);

             return;

          }

          ih=(BITMAPINFOHEADER *)(pBmp+sizeof(BITMAPFILEHEADER));

          AppendObject(DT_BITMAP,x,y,x+ih->biWidth,y+ih->biHeight);

          arObj[arNum-1]->Bitmap=pBmp;

          arObj[arNum-1]->Len=FileSize;

 

          InvalidateRect(hWndMain,NULL,TRUE);

          NowTool=DT_SELECT;

          NowSel=arNum-1;

      }

   }

}

 

ÆÄÀÏ ¿­±â °øÅë ´ëÈ­»óÀÚ¸¦ ¿­¾î BMP ÆÄÀÏÀ» ¼±ÅÃÇϵµ·Ï ÇÑ ÈÄ ÀÌ ÆÄÀÏÀÇ Å©±â¸¸Å­ pBmp¸¦ ÇÒ´çÇÏ¿© ¸ðµÎ Àоîµé¿´´Ù. ÆÄÀÏ ¼±µÎÀÇ ¸ÅÁ÷ ³Ñ¹ö¸¦ ÀÐ¾î º¸°í ÀÌ °ªÀÌ "BM"ÀÎÁö, Áï ºñÆ®¸Ê ÆÄÀÏÀÌ ¸Â´ÂÁö °£´ÜÇÑ Á¡°ËÀ» ÇÑ ÈÄ ºñÆ®¸ÊÀÇ Å©±â¸¸ÇÑ °´Ã¼¸¦ ¹è¿­¿¡ Ãß°¡ÇÑ´Ù. ¸ÅÁ÷ ³Ñ¹ö¸¸À¸·Î ºñÆ®¸Ê ÆÄÀÏÀÎÁö È®½ÅÇÏ´Â °ÍÀº ¿Ïº®ÇÏÁö ¾ÊÁö¸¸ 99.99% ÀÌ»óÀÇ °æ¿ì¸¦ °É·¯³½´Ù. AppendObject ÇÔ¼ö´Â °´Ã¼ÀÇ ¿µ¿ª°ú ¼Ó¼ºÀ» ÃʱâÈ­Çϱâ´Â ÇÏÁö¸¸ Bitamp, Len ¸â¹ö´Â º¯°æÇÏÁö ¾ÊÀ¸¹Ç·Î ÀÏ´Ü Ãß°¡ÇÑ ÈÄ µû·Î ´ëÀÔÇØ¾ß ÇÑ´Ù.

ºñÆ®¸ÊÀ» Ãß°¡ÇÑ ÈÄ ÀÛ¾÷ ¿µ¿ªÀ» ¹«È¿È­ÇÏ¿© ´Ù½Ã ±×¸®µµ·Ï ÇÏ°í ¼±Åà Åø·Î ÀÚµ¿ º¯°æÇÑ´Ù. Ÿ¿øÀ̳ª Á÷¼±Ã³·³ ¿©·¯ °³ÀÇ ºñÆ®¸ÊÀ» µ¿½Ã¿¡ »ðÀÔÇÏ´Â °æ¿ì°¡ ¸¹Áö ¾Ê±â ¶§¹®¿¡ ºñÆ®¸ÊÀº Çѹø¿¡ Çϳª¸¸ »ðÀÔÇϵµ·Ï Çß´Ù. ¹æ±Ý »ðÀÔµÈ ºñÆ®¸ÊÀº ¼±Åà »óÅ°¡ µÇ¸ç ¼±ÅÃÅø·Î ÀÚµ¿ ÀüȯµÇ¹Ç·Î »ðÀÔ ÈÄ °ð¹Ù·Î À̵¿À̳ª Å©±â º¯°æÀ» ÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ½ÃÁ¡Àº ºñÆ®¸Ê ÅøÀ» ¼±ÅÃÇÑ »óÅ¿¡¼­ ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°À» ´©¸¦ ¶§ÀÌ´Ù.

 

LRESULT OnLButtonDown(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   ....

   if (NowTool==DT_BITMAP) {

      InsertBitmap(LOWORD(lParam),HIWORD(lParam));

      return 0;

   }

 

InsertBitmap ÇÔ¼ö¸¸ ºÎ¸£¸é »ç¿ëÀÚ¿¡°Ô »ðÀÔÇÒ ÆÄÀÏÀ» ¹¯°í ¹è¿­¿¡ Ãß°¡ÇÏ´Â ¸ðµç µ¿ÀÛÀÌ ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼­ ó¸®µÇ¸ç »ç¿ëÀÚÀÇ Ãë¼Ò³ª ¿¡·¯ »óȲµµ ÀÌ ÇÔ¼ö°¡ ó¸®ÇϹǷΠOnLButtonDownÀº ÇÔ¼ö¸¸ È£ÃâÇÏ°í ¸®ÅÏÇÏ¸é µÈ´Ù. »ðÀÔµÈ ºñÆ®¸ÊÀº OnPaint¿¡¼­ ±×¸°´Ù.

 

LRESULT OnPaint(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   ....

   BITMAPFILEHEADER *fh;

   BITMAPINFOHEADER *ih;

   int bx,by;

   BYTE *pRaster;

   ....

      case DT_BITMAP:

          fh=(BITMAPFILEHEADER *)arObj[idx]->Bitmap;

          pRaster=(PBYTE)fh+fh->bfOffBits;

          ih=(BITMAPINFOHEADER *)((PBYTE)fh+sizeof(BITMAPFILEHEADER));

          bx=ih->biWidth;

          by=ih->biHeight;

          StretchDIBits(hMemDC,arObj[idx]->rt.left,arObj[idx]->rt.top,

             arObj[idx]->rt.right-arObj[idx]->rt.left,

             arObj[idx]->rt.bottom-arObj[idx]->rt.top,0,0,bx,by,

             pRaster,(BITMAPINFO *)ih,DIB_RGB_COLORS,SRCCOPY);

          break;

 

°´Ã¼ÀÇ Bitmap Æ÷ÀÎÅÍ¿¡ ºñÆ®¸Ê ÆÄÀÏÀÇ ÀÌÁø µ¥ÀÌÅ͸¦ ¸ðµÎ ³Ö¾î µÎ¾úÀ¸¹Ç·Î ÀÌ Á¤º¸¸¦ Àоî DIB Ãâ·Â ÇÔ¼ö¿¡°Ô ³Ñ±â±â¸¸ ÇÏ¸é µÈ´Ù. »ç¿ëÀÚ°¡ »ðÀÔµÈ µµÇüÀÇ Å©±â¸¦ º¯°æÇÒ ¼ö ÀÖÀ¸¹Ç·Î ½ºÆ®·¹ÄªÇÏ¿© °´Ã¼ÀÇ ¿µ¿ª¿¡ ¸Â°Ô Ãâ·ÂÇØ¾ß ÇÑ´Ù. ¿©±â±îÁö Äڵ带 ÀÛ¼ºÇÑ ÈÄ Å×½ºÆ®ÇØ º¸¸é »ðÀÔµÈ ºñÆ®¸ÊÀÌ Äµ¹ö½º¿¡ Ãâ·ÂµÉ °ÍÀÌ´Ù.

StretchDiBits ÇÔ¼ö´Â DIB¸¦ ¸Å¹ø DDB·Î º¯È¯ÇÑ ÈÄ Ãâ·ÂÇϹǷΠ´Ù¼Ò ºñÈ¿À²ÀûÀ̱â´Â ÇÏ´Ù. ±×·¯³ª Å« ºñÆ®¸ÊÀ» ³ÖÁö´Â ¾ÊÀ» °ÍÀÌ°í ±â²¯ÇØ¾ß ÇÑ µÎ°³ Á¤µµÀÇ ºñÆ®¸Ê¸¸ »ç¿ëÇϹǷΠº° ¹®Á¦´Â ¾ø´Ù. ¼Óµµ¸¦ Á» ´õ ³ôÀÌ°í ½Í´Ù¸é ºñÆ®¸ÊÀ» »ðÀÔÇÒ ¶§ DDB·Î ¹Ì¸® ¹Ù²ã ³õ°í DObject¿¡ DDBÀÇ ÇÚµéÀ» ÀúÀåÇØ ³õÀ» ¼ö´Â ÀÖ´Ù. ±×·¸´Ù¶óµµ ÆÄÀÏ·Î ÀúÀåÇÒ ¶§´Â ¹Ýµå½Ã DIB·Î ÀúÀåÇØ¾ß ÇϹǷΠDIB¸¦ ¹ö¸± ¼ö´Â ¾ø´Ù.

´ÙÀ½Àº »ðÀÔµÈ ºñÆ®¸ÊÀ» °ü¸®ÇÏ´Â Äڵ带 ÀÛ¼ºÇØ º¸ÀÚ. °´Ã¼ÀÇ ¼±ÅÃ, À̵¿, Å©±â º¯°æ Äڵ尡 ÀÌ¹Ì ¸¶¿ì½º Çڵ鷯¿¡ ÀÛ¼ºµÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ Äڵ带 ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ºñÆ®¸Êµµ ´Ù¸¥ µµÇü°ú ¸¶Âù°¡Áö·Î ¼±ÅõǸç À̵¿, Å©±â º¯°æµÇ¹Ç·Î Ưº°È÷ Äڵ带 ´õ ÀÛ¼ºÇÒ °ÍÀº ¾ø´Ù. ´Ù¸¸ À̵¿, Å©±â º¯°æÁßÀÏ ¶§ Àӽà °´Ã¼¸¦ ±×¸®´Â Äڵ常 Á¶±Ý Ãß°¡ÇÏ¸é µÈ´Ù.

 

void DrawTemp(const DObject *pObj)

{

   ....

   case DT_RECTANGLE:

   case DT_TEXT:

   case DT_BITMAP:

   case DT_META:

      Rectangle(hdc,pObj->rt.left,pObj->rt.top,pObj->rt.right,pObj->rt.bottom);

      break;

 

ºñÆ®¸ÊÀº Á÷»ç°¢Çü ¸ð¾çÀ» °¡Áö¹Ç·Î »ç°¢ µµÇü°ú ¸¶Âù°¡Áö·Î Rectangle ÇÔ¼ö·Î »ç°¢ ¿µ¿ªÀ» Á¡¼±À¸·Î ±×·È´Ù. À̵¿ÁßÀÏ ¶§ ºñÆ®¸Ê ¸ð¾ç±îÁö ±×¸± ÇÊ¿ä´Â ¾ø´Ù. ÀÌÈÄ Ãß°¡µÉ ¸ÞŸ ÆÄÀÏÀ̳ª ÅؽºÆ®µµ ¸¶Âù°¡ÁöÀ̹ǷΠ¹Ì¸® Äڵ忡 Ãß°¡ÇØ ³õ±â·Î ÇÏÀÚ.

ºñÆ®¸ÊÀº ´Ù¸¥ °´Ã¼¿Í´Â ´Þ¸® µ¿ÀûÀ¸·Î ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ »ç¿ëÇÑ´Ù. Á÷¼±, ¿ø, ºñÆ®¸Ê, »ç°¢Çü µµÇü ³× °³°¡ ºñÆ®¸Ê¿¡ Ãß°¡µÇ¾î ÀÖ´Â »óȲÀ» ±×¸²À¸·Î ±×·Á º¸¸é ´ÙÀ½°ú °°´Ù.

arObj ¹è¿­Àº DObjectÀÇ Æ÷ÀÎÅÍ ¹è¿­À̸ç arObj ¹è¿­ ¿ä¼Ò°¡ °¡¸®Å°´Â °÷¿¡´Â DObject ±¸Á¶Ã¼°¡ ÀÖ´Ù. Á÷¼±À̳ª Ÿ¿øÀº DObject ±¸Á¶Ã¼ Çϳª¸¸ ÀÖÁö¸¸ ºñÆ®¸ÊÀº ÀÌ ±¸Á¶Ã¼¿¡ ¼ÓÇÑ Bitmap Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â °÷¿¡ ºñÆ®¸ÊÀÇ ÀÌÁø Á¤º¸°¡ ¶Ç ÇÒ´çµÇ¾î ÀÖ´Ù. ÀÌÈÄ Ãß°¡µÉ ÅؽºÆ®³ª ¸ÞŸ ÆÄÀϵµ ¸¶Âù°¡ÁöÀÌ´Ù. ±×·¡¼­ °´Ã¼¸¦ »èÁ¦ÇÒ ¶§ DObject ±¸Á¶Ã¼¸¸ ÇØÁ¦Çؼ­´Â ¾ÈµÇ¸é ÀÌ ±¸Á¶Ã¼ÀÇ Bitmap ¸â¹ö°¡ °¡¸®Å°´Â °÷ÀÇ ¸Þ¸ð¸®¸¦ ¸ÕÀú ÇØÁ¦ÇØ¾ß ÇÑ´Ù. DelObject ÇÔ¼ö¿¡ ´ÙÀ½ ÇØÁ¦ Äڵ带 Ãß°¡ÇÑ´Ù.

 

void DelObject(int idx)

{

   if (arObj[idx]->Type >= DT_TEXT && arObj[idx]->Type <= DT_META) {

      free(arObj[idx]->Text);

   }

   free(arObj[idx]);

   memmove(arObj+idx,arObj+idx+1,(arNum-idx-1)*sizeof(DObject *));

   arNum--;

}

 

»èÁ¦ÇÒ °´Ã¼°¡ ÅؽºÆ®³ª ºñÆ®¸Ê, ¸ÞŸ ÆÄÀÏÀÏ °æ¿ì ÀÌ °´Ã¼ÀÇ Text ¸â¹ö°¡ °¡¸®Å°´Â °÷ÀÇ ÇÒ´çµÈ ¸Þ¸ð¸®¸¦ ¸ÕÀú ÇØÁ¦ÇÑ ÈÄ DObject ±¸Á¶Ã¼¸¦ ÇØÁ¦ÇØ¾ß ÇÑ´Ù. Text, Bitmap, Meta´Â À̸§¸¸ ´Ù¸¦ »Ó °°Àº ¹øÁö¸¦ °øÀ¯ÇÏ´Â ¸â¹öÀ̹ǷΠ¾î¶² ¸â¹ö·Î ÇØÁ¦ÇϵçÁö °á°ú´Â ¸¶Âù°¡ÁöÀÌ´Ù. ĵ¹ö½º°¡ Æı«µÉ ¶§µµ ¸¶Âù°¡Áö·Î ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇØ¾ß ÇÑ´Ù.

 

LRESULT OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

   int idx;

 

   for (idx=0;idx<arNum;idx++) {

      if (arObj[idx]->Type >= DT_TEXT && arObj[idx]->Type <= DT_META) {

          free(arObj[idx]->Text);

      }

      free(arObj[idx]);

   }

   free(arObj);

   ....

 

¸¸¾à ÀÌ ¸Þ¸ð¸®¸¦ ÇØÁ¦ÇÏÁö ¾Ê°í DObject ±¸Á¶Ã¼¸¸ ÇØÁ¦ÇÏ¸é ºñÆ®¸ÊÀÌ Â÷ÁöÇϴ¸¸Å­ ¸Þ¸ð¸® ´©¼ö°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù.