2.ÀÌÀü ¹öÀü ¼öÁ¤

»õ·Î¿î ±â´ÉÀ» Ãß°¡Çϱâ Àü¿¡ ¸ÕÀú ½Ç½À Áغñ¸¦ Á» ÇÏÀÚ. ÀÌÀü ¹öÀüÀÇ ¹ö±×¸¦ ¼öÁ¤ÇÏ°í ±¸Á¶ÀûÀ¸·Î ÁÁÁö ¾ÊÀº Äڵ带 ¸®ÆÑÅ丵ÇÏ¿© ½Ç½ÀÇϱâ ÆíÇÑ È¯°æÀ» ¸¸µç´Ù. Dangeun12 Æú´õ¸¦ ¸ù¶¥ º¹»çÇÏ°í Æú´õ À̸§¸¸ Dangeun13À¸·Î º¯°æÇÏ¿© »çº» ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¸ç ÀÌÈÄÀÇ ÇÁ·ÎÁ§Æ®µµ ÀÌ·± ½ÄÀ¸·Î »çº»À» °è¼Ó ¸¸µé¾î ³ª°¡¸é µÈ´Ù. À̷νá 1±Ç¿¡¼­ ÀÛ¼ºÇß´ø ¸ðµç ¼º°ú¹°À» °è½ÂÇÔÀº ¹°·ÐÀÌ°í º°·Î ¹Ý°©Áö´Â ¾ÊÁö¸¸ ¹ö±×¿Í ±¸Á¶ÀûÀÎ ¹®Á¦±îÁöµµ °í½º¶õÈ÷ ¹°·Á ¹Þ°Ô µÈ´Ù. CD-ROM¿¡¼­ º¹»çÇÒ °æ¿ì Àбâ Àü¿ë ¼Ó¼ºÀ» ÇØÁ¦ÇØ¾ß ÇÁ·ÎÁ§Æ®¸¦ ¼öÁ¤ÇØ º¼ ¼ö ÀÖ´Ù.

ÀÌ·¸°Ô ¸¸µç »çº» ÇÁ·ÎÁ§Æ®¸¦ ±×´ë·Î ¸±¸®ÁîÇϸé 1.0°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ½ÇÇà ÆÄÀÏÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù. »çº»À» ÄÄÆÄÀÏÇßÀ¸¹Ç·Î ´ç¿¬ÇÑ ¾ê±â°ÚÁö¸¸ Áö±ÝºÎÅÍ ÀÌ »çº»Àº Á¶±Ý¾¿ Á¶±Ý¾¿ ´Þ¶óÁú °ÍÀÌ´Ù. ¹ö±×µµ ¼öÁ¤ÇÏ°í »õ·Î¿î ±â´Éµµ Çϳª µÑ¾¿ ´Ã¾î³­´Ù. »õ·Î ¸¸µç »çº» ÇÁ·ÎÁ§Æ®·Î ´çÀå µå·¯³ª´Â °£´ÜÇÑ ¹ö±×¸¸ °íÄ¡±â·Î ÇÑ´Ù. ¾Ë°í´Â ÀÖ´õ¶óµµ Â÷ÈÄ ±Ùº»ÀûÀÎ ±¸Á¶°¡ ¹Ù²î¸é ÀÚ¿¬½º·´°Ô ÇØ°áµÇ´Â ¹ö±×µµ ÀÖ°í °ü·Ã ±â´ÉÀ» È®ÀåÇÒ ¶§ °°ÀÌ ¼öÁ¤ÇÏ´Â °ÍÀÌ È¿À²ÀûÀÎ ¹ö±×µµ Àִµ¥ ÀÌ·± ¹ö±×´Â ´çºÐ°£ ³ë¿î ¹ö±×·Î ³²°ÜµÐ´Ù.

°¡.ºñÁÖ¾ó C++ 2005 Áö¿ø

2002³â¿¡ °³¹ßµÈ ´ç±Ù 1.0Àº ÁÖ ÄÄÆÄÀÏ·¯·Î ºñÁÖ¾ó C++ 6.0À» »ç¿ëÇßÀ¸¸ç ±× ´ç½ÃÀÇ ÃֽŠÄÄÆÄÀÏ·¯ÀÎ ºñÁÖ¾ó C++ 7.0À¸·Îµµ ÄÄÆÄÀÏÇÒ ¼ö ÀÖ´Ù. Áß°£¿¡ ºñÁÖ¾ó C++ 2003ÀÌ ¹ßÇ¥µÇ¾ú°í ÇöÀç ½ÃÁ¡ÀÎ 2006³â¿¡´Â 8.0¿¡ ÇØ´çÇÏ´Â ºñÁÖ¾ó C++ 2005°¡ ÃֽŠ¹öÀüÀÌ´Ù. ÃֽŠ¹öÀüÀÇ ÄÄÆÄÀÏ·¯¸¦ »ç¿ëÇÏ´Â »ç¶÷µµ ÀÖÀ¸¹Ç·Î ÀÌ ÄÄÆÄÀÏ·¯µµ Áö¿øÇÒ ¼ö ÀÖ°Ô ¼öÁ¤ÇÑ´Ù.

°°Àº ȸ»çÀÇ Á¦Ç°À̹ǷΠ¾î·ÆÁö ¾Ê°Ô ÇÁ·ÎÁ§Æ®¸¦ º¯È¯ÇÒ ¼ö ÀÖ´Ù. ´Ü, ÃֽŠ¹öÀü¿¡ °ü½ÉÀÌ ¾ø°Å³ª 8.0À» ¼³Ä¡ÇÒ »óȲÀÌ ¾ÈµÈ´Ù¸é °è¼Ó 6.0À¸·Î ½Ç½ÀÀ» ÁøÇàÇصµ »ó°ü¾ø´Ù. ºñÁÖ¾ó C++Àº 7.0 ÀÌÈÄ ¼Ö·ç¼Ç ÆÄÀÏÀº sln È®ÀåÀÚ¸¦ »ç¿ëÇߴµ¥ 8.0¿¡¼­ Æ÷¸ËÀÌ Á¶±Ý ¹Ù²î¾ú´Ù. Dangeun.sln ÆÄÀÏÀ» ºñÁÖ¾ó C++ 8.0À¸·Î ¿­¸é º¯È¯ÇÒ °ÍÀÎÁö¸¦ Áú¹®Çϴµ¥ ¿¹ ¹öÆ°À» ´­·¯ º¯È¯ÇÑ´Ù. ÀÌÀü ÇÁ·ÎÁ§Æ®¸¦ ¹é¾÷ÇÒ °ÍÀÎÁöµµ ¹¯´Âµ¥ ±»ÀÌ ±×·¸°Ô ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

VC 8.0À¸·Î Dangeun ÇÁ·ÎÁ§Æ®¸¦ º¯È¯ÇÑ ÈÄ ÄÄÆÄÀÏÇØ º¸ÀÚ. 1°³ÀÇ ¿¡·¯¿Í 44°³ÀÇ °æ°í°¡ ¹«´õ±â·Î ¹ß»ýÇÒ °ÍÀÌ´Ù. VC 6.0¿¡¼­´Â ¹«³­ÇÏ°Ô ÀÎÁ¤µÇ¾ú´ø ¹®¹ýÀÌ »õ ÄÄÆÄÀÏ·¯¿¡¼­´Â ¿¡·¯³ª °æ°í·Î 󸮵Ǵ °ÍÀε¥ ¹®¹ýÀÌ ¾ö°ÝÇÏ´Ù´Â °ÍÀº ±×¸¸Å­ ½Ç¼öÀÇ À§ÇèÀ» ÁÙÀÏ ¼ö ÀÖ´Ù´Â ¶æÀ̹ǷΠ¹Ù¶÷Á÷ÇÏ´Ù. ¿¡·¯´Â ApiEdit.cppÀÇ Create ÇÔ¼ö¿¡¼­ ¹ß»ýÇߴµ¥ ÀÌ ÇÔ¼öÀÇ ¸®ÅÏŸÀÔÀÌ ÁöÁ¤µÇ¾î ÀÖÁö ¾Ê¾Æ¼­ÀÌ´Ù.

 

BOOL CApiEdit::Create(int x,int y,int w,int h,DWORD style,UINT id,HWND hParent)

{

     CreateWindow("ApiEdit",NULL, style,

          x,y,w,h,hParent,(HMENU)id,GetModuleHandle(NULL),this);

     return TRUE;

}

 

ÀÌÀü ÄÄÆÄÀÏ·¯´Â ÇÔ¼öÀÇ ¸®ÅÏ Å¸ÀÔÀÌ ¸í½ÃµÇÁö ¾ÊÀ¸¸é int·Î °¡Á¤Çß°í BOOLÀº int¿Í ȣȯµÇ¹Ç·Î º° ¹®Á¦°¡ ¾ø¾úÀ¸³ª VC 8.0Àº À̸¦ ¸í¹éÇÑ ¿¡·¯·Î ó¸®ÇÑ´Ù. ¸®ÅÏ Å¸ÀÔ BOOLÀ» ÇÔ¼ö ¼±µÎ¿¡ Ãß°¡ÇÑ´Ù. Çì´õ ÆÄÀÏ¿¡´Â ¿øÇüÀÌ Á¦´ë·Î µÇ¾î Àִµ¥ ±¸Çö ÆÄÀÏ¿¡¸¸ ºüÁ® ÀÖ´Â °É·Î ºÁ¼­ ´Ü¼øÇÑ ½Ç¼öÀÎ °Í °°´Ù. ¾Æ¸¶ ¹Ù·Î À§ÀÇ »ý¼ºÀÚ¿Í ÇÔ²² ¸¸µé´Ùº¸´Ï ±ôºýÇßÀ» °ÍÀÌ´Ù.

°æ°í´Â Å©°Ô Áß¿äÇÏÁö ¾ÊÀº »çÇ׵鿡 ´ëÇÑ ÁöÀûÀε¥ _splitpath, strnicmp, itoa µî ¿À·¡µÈ ·±Å¸ÀÓ ÇÔ¼öµé »ç¿ëÇÏ¿© ȣȯ¼º¿¡ ºÒ¸®ÇÏ´Ù´Â ¶æÀÌ´Ù ÀÌ Áß Å¸´çÇÑ ÁöÀûµµ Àִµ¥ Util.cppÀÇ ´ÙÀ½ µÎ ±ºµ¥¸¸ ¼öÁ¤ÇÑ´Ù. strcpy, strlen ÇÔ¼ö¸¦ »ç¿ëÇߴµ¥ À¯´ÏÄڵ带 Áö¿øÇÒ ¼ö ÀÖ´Â lstrcpy, lstrlen ÇÔ¼ö·Î º¯°æÇÑ´Ù. ¾îÂ÷ÇÇ ±â´ÉÀº °°´Ù.

 

BOOL SHRegReadString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpDefault,

   LPTSTR lpRet, DWORD nSize)

{

          ....

        lstrcpy(lpRet, lpDefault);

 

BOOL SHRegWriteString(HKEY hKey, LPCTSTR lpKey, LPCTSTR lpValue, LPCTSTR lpData)

{

    if (RegSetValueEx(key, lpValue,0,REG_SZ,(LPBYTE)lpData,lstrlen(lpData)+1)

          !=ERROR_SUCCESS)

     ....

 

³ª¸ÓÁö °æ°í´Â ÁַΠȣȯ¼º¿¡ ºÒ¸®ÇÏ´Ù´Â ¶æÀε¥ Áß¿äÇÏÁö ¾ÊÀ¸¹Ç·Î ¸ðµÎ ¹«½ÃÇÑ´Ù. stdafx.h¿¡ ´ÙÀ½ ÇÑ ÁÙ¸¸ Ãß°¡ÇÏ¸é µÈ´Ù.

 

#define _WIN32_WINNT 0x400

#define _WIN32_WINDOWS 0x401

 

#pragma warning (disable:4996)            // deprecated °æ°í ¹«½Ã

 

4996¹ø °æ°í¸¦ ´õ ÀÌ»ó Ãâ·ÂÇÏÁö ¸»¶ó´Â ¶æÀÌ´Ù. ÀÌ Áö½Ã¹®ÀÌ ÀÖÀ¸¸é ÄÄÆÄÀÏ·¯´Â ÁöÁ¤ÇÑ °æ°í¿¡ ´ëÇؼ­´Â Âï¼Ò¸®µµ ÇÏÁö ¾Ê´Â´Ù. ÀÌÈÄÀÇ ÇÁ·ÎÁ§Æ®´Â 8.0µµ Áö¿øÇÏÁö¸¸ ÁÖ·Î 6.0À¸·Î ÁøÇàÇÑ´Ù. ºñÁÖ¾ó C++ 7.0 ÀÌÈÄ´Â ´å³Ý¿¡ ´ëÇÑ Áö¿ø¸¸ °­È­µÇ¾ú°í C/C++ ¾ð¾î¿¡ ´ëÇÑ Áö¿øÀº º°¹Ý ´Þ¶óÁø °ÍÀÌ ¾øÀ¸¹Ç·Î 6.0ÀÌ °¡º±°í ¿ÀÈ÷·Á Æí¸®ÇÏ´Ù. ¹°·Ð ½Ã½ºÅÛÀÌ °í¼º´ÉÀÌ°í È­·ÁÇÑ UI¸¦ ¾²°í ½Í´Ù¸é 8.0À¸·Î ½Ç½ÀÇصµ »ó°ü¾ø´Ù.

³ª.¿ÀŸ ¼öÁ¤

Ä¡¸íÀûÀÎ ¹ö±×ÀÇ ¿øÀÎÀÌ ¿¹»ó¿Ü·Î ´Ü¼øÇÑ ¿ÀŸÀÎ °æ¿ì°¡ ¸¹´Ù. ´ç±Ù 1.0¿¡µµ ¿ÀŸµéÀÌ ¸¹ÀÌ Àִµ¥ ¿ì¼± º° ºÎÀÛ¿ëÀÌ ¾ø´Â ´Ü¼ø ¿ÀŸºÎÅÍ ¼öÁ¤ÇÑ´Ù.

OnPaintÀÇ ¿ÀŸ

´ç±ÙÀº ÁÙ ´ÜÀ§ ´õºí ¹öÆÛ¸µÀ» »ç¿ëÇϴµ¥ DrawLineÀÌ ÇÑ ÁÙÀ» Ãâ·ÂÇϸé BitBltÀº ÀÌ ÁÙÀ» È­¸éÀ¸·Î Àü¼ÛÇÑ´Ù. OnPaintÀÇ ÇöÀç Äڵ带 º¸¸é ´ÙÀ½°ú °°ÀÌ µÇ¾î ÀÖ´Ù.

 

void CApiEdit::OnPaint(HWND hWnd)

{

     ....

          BitBlt(hdc,0,(l-t)*LineHeight,frt.right,(l-t)*LineHeight+LineHeight,

              hMemDC,0,0,SRCCOPY);

 

¿©±â¼­ ºñÆ®¸ÊÀÇ ³ôÀÌ Àμö¿¡ (l-t)*LineHeight+LineHeight¶ó´Â ¼ö½ÄÀ» ÁÖ¾ú´Âµ¥ ÀÌ Àμö´Â ´Ü¼øÇÑ ³ôÀÌÀ̹ǷΠLineHeight¶ó°í¸¸ ¾²¸é µÈ´Ù. À§ ÄÚµåÀÇ ¼ö½ÄÀº ³ôÀÌ°¡ ¾Æ´Ï¶ó Ãâ·ÂÇÒ YÁÂÇ¥Àε¥ BitBlt ÇÔ¼ö´Â XYWH¸¦ Àμö·Î ÃëÇϴµ¥ LTRBÀÎ °ÍÀ¸·Î À߸ø Âø°¢Çß´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

          BitBlt(hdc,0,(l-t)*LineHeight,frt.right,LineHeight,

              hMemDC,0,0,SRCCOPY);

 

³ôÀÌ°¡ ³²¾Æ¼­ Ãâ·Â¿µ¿ªÀÌ ³Ê¹« ÄǴµ¥ ¾îÂ÷ÇÇ DrawLineÀÌ ¸¸µç ºñÆ®¸ÊÀÇ Å©±â°¡ LineHeight ³ôÀ̹ۿ¡ ¾ÈµÇ¹Ç·Î º° ºÎÀÛ¿ëÀº ¾ø´Ù.

ÇÔ¼öÀÇ ¸®ÅÏ°ª ¿ÀŸ

´ç±Ù 1.0¿¡´Â ¾ÆÁÖ È²´çÇÑ ¿ÀŸ°¡ ÀÖ´Ù. FileWnd.cpp¿¡´Â µð·ºÅ丮°¡ ºñ¾î ÀÖ´ÂÁö Á¶»çÇÏ´Â IsDirEmpty¶ó´Â ÇÔ¼ö°¡ Àִµ¥ ½ÇÁ¦ Á¶»çÇÏ´Â Á¤º¸°¡ ¹Ý´ë·Î µÇ¾î ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.

 

BOOL IsDirEmpty(TCHAR *Path)

{

     TCHAR SrchPath[MAX_PATH];

     WIN32_FIND_DATA wfd;

     HANDLE hSrch;

     BOOL nResult=TRUE;

    BOOL Result=TRUE;

     TCHAR *szFilter;

 

     lstrcpy(SrchPath, Path);

     lstrcat(SrchPath, "\\*.*");

     hSrch=FindFirstFile(SrchPath,&wfd);

     szFilter=(TCHAR *)SendMessage(hFilter,CB_GETITEMDATA,SendMessage(hFilter,CB_GETCURSEL,0,0),0);

 

     while (nResult) {

          if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {

           if (!(lstrcmp(wfd.cFileName,".") && lstrcmp(wfd.cFileName,".."))) {

               Result=FALSE;

                   break;

              }

          } else {

              if (IsMatch(wfd.cFileName,szFilter)) {

               Result=FALSE;

                   break;

              }

          }

          nResult=FindNextFile(hSrch,&wfd);

     }

     FindClose(hSrch);

     return Result;

}

 

Path µð·ºÅ丮ÀÇ ÆÄÀÏÀ» °Ë»öÇÏ¿© ÇÊÅÍ°¡ ÁöÁ¤ÇÏ´Â Á¶°Ç¿¡ ¸Â´Â ÆÄÀÏÀÌ Àְųª ¼­ºê µð·ºÅ丮°¡ Çϳª¶óµµ ÀÖÀ¸¸é ºñ¾î ÀÖÁö ¾ÊÀº °ÍÀÌ´Ù. ±×·±µ¥ ¾ÖÃÊÀÇ ÄÚµå´Â ResultÀÇ ÃʱⰪ°ú ´ëÀԵǴ °ªÀÌ ¸ðµÎ ¹Ý´ë·Î µÇ¾î À־ µð·ºÅ丮°¡ ºñ¾î ÀÖÁö ¾ÊÀ» ¶§ TRUE¸¦ ¸®ÅÏÇß´Ù. ¼­ºê µð·ºÅ丮°¡ ÀÚ±â ÀÚ½ÅÀΰ¡ ºÎ¸ðÀΰ¡¸¦ ÆǺ°ÇÏ´Â Äڵ嵵 À߸øµÇ¾îÀִµ¥ ÀÌ ºÎºÐÀº ´ÙÀ½ Ç׿¡¼­ µû·Î ¼³¸íÇÒ °ÍÀÌ´Ù. ÀÌ ÇÔ¼ö°¡ Ʋ¸° °á°ú¸¦ º¸°íÇÔ¿¡µµ ºÒ±¸ÇÏ°í ¹®Á¦°¡ ¾ø¾ú´ø ÀÌÀ¯´Â ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °÷µµ °°ÀÌ Æ²·È±â ¶§¹®ÀÌ´Ù.

 

int OnFindNode(TCHAR *Path,DWORD Attr,LPVOID pCustom)

{

     ....

    if ((Attr & FILE_ATTRIBUTE_DIRECTORY) && IsDirEmpty(Path) == FALSE) {

          TV.mask=TVIF_CHILDREN;

          TV.hItem=Node;

          TV.cChildren=1;

 

          TreeView_SetItem(hFileTree,&TV);

     }

 

ºñ¾îÀÖÁö ¾ÊÀº µð·ºÅ丮À̸é ÀÌ ³ëµåÀÇ Â÷ÀÏµå °³¼ö¸¦ 1·Î ¼³Á¤ÇÏ¿© + ¹öÆ°ÀÌ ³ªÅ¸³ªµµ·Ï ÇÒ Àǵµ¿´´Âµ¥ ºó µð·ºÅ丮¿¡ ´ëÇØ +¹öÆ°À» Ç¥½ÃÇß´Ù. Á¶»çÇÏ´Â ÂÊÀÌ ¹Ý´ëÀÇ °á°ú¸¦ ¸®ÅÏÇÏ°í Àû¿ëÇÏ´Â Âʵµ ¹Ý´ëÀÇ Á¶°ÇÀ» »ç¿ëÇßÀ¸¹Ç·Î °á±¹Àº ¸Â´Â ÆÇ´ÜÀ» ÇÑ °ÍÀÌ´Ù. ¿ø·¡´ë·Î µÎ¾îµµ µ¿ÀÛ¿¡´Â »ç½Ç ¾Æ¹« ¹®Á¦°¡ ¾ø´Ù. ±×·¯³ª ÇÔ¼öÀÇ À̸§°ú Á¶»çÇÏ´Â Á¤º¸°¡ Ʋ¸®¹Ç·Î Â÷ÈÄÀÇ À¯Áö º¸¼ö¸¦ À§ÇØ ¼öÁ¤ÇÏ´Â °ÍÀÌ ¸¶¶¥ÇÏ´Ù. ¾Æ´Ï¸é ÇÔ¼ö¸íÀ» IsDirNotEmpty·Î ¹Ù²Ùµç°¡.

¼³Á¤ ´ëÈ­»óÀÚÀÇ Å»ÀÚ

±âº» ¼³Á¤ ´ëÈ­»óÀÚ(Config.cpp)ÀÇ ÀÏ¹Ý ¼³Á¤ ÆäÀÌÁö¿¡¼­ "È°¼º ÇÁ·ÎÁ§Æ® ´Ù½Ã ¿­±â" ¿É¼ÇÀ» º¯°æÇÒ ¶§ Àû¿ë ¹öÆ°ÀÌ È°¼ºÈ­µÇÁö ¾Ê´Â ¹ö±×°¡ ÀÖ´Ù. ÀÌ ´ëÈ­»óÀÚÀÇ WM_COMMAND¿¡ ´ÙÀ½ case¸¦ Ãß°¡ÇÑ´Ù.

 

BOOL CALLBACK GeneralDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          ....

          case IDC_RELOADNOASK:

        case IDC_RELOADPROJECT:

              PropSheet_Changed(GetParent(hDlg),hDlg);

              return TRUE;

 

´ëÈ­»óÀÚ³»ÀÇ ¾î¶² ¿É¼ÇÀÌ¶óµµ º¯°æÇϱ⸸ Çϸé Àû¿ë ¹öÆ°ÀÌ È°¼ºÈ­µÇ¾î¾ß Çϴµ¥ ÀÌ ¿É¼Ç¿¡ ´ëÇؼ­¸¸ case°¡ ´©¶ôµÇ¾î ÀÖ´Ù. case¸¸ Ãß°¡Çϸé À§ÂÊÀÇ case¿Í µ¿ÀÏÇÑ Äڵ带 °øÀ¯ÇϹǷΠÀû¿ë ¹öÆ°ÀÌ ÀÚ¿¬½º·´°Ô È°¼ºÈ­µÈ´Ù.

¿¡µðÆ®ÀÇ ÀÔ·Â ±æÀÌ

¿¡µðÆ® ÄÁÆ®·Ñ·Î ÀÔ·ÂÀ» ¹ÞÀ» ¶§´Â ¹öÆÛÀÇ ±æÀÌ ÀÌ»óÀ» ³ÑÁö ¾Êµµ·Ï ÃÖ´ë ÀÔ·Â °¡´É ¹®ÀÚ¼ö¸¦ EM_LIMITTEXT ¸Þ½ÃÁö·Î Á¦ÇÑÇØ¾ß Çϴµ¥ ¹®ÀÚ¼ö¸¦ °è»êÇÒ ¶§ ³Î Á¾·á ¹®ÀÚ¸¦ ¹Ìó °í·ÁÇÏÁö ¸øÇß´Ù. ½ÇÁ¦ ¹öÆÛ ±æÀ̺¸´Ù Çϳª ´õ ÀûÀº ¹®ÀÚ±îÁö¸¸ ÀÔ·Â¹Þ¾Æ¾ß Çϴµ¥ ¹öÆÛ±æÀ̺и¸Å­ ÀԷ¹޵µ·Ï À߸ø ÁöÁ¤µÇ¾î ÀÖ´Ù. ÀÌ·± ¹ö±×°¡ ¸î ±ºµ¥ Àִµ¥ Config.cppÀÇ ´ÙÀ½ µÎ °÷À» ¼öÁ¤ÇÏÀÚ.

 

BOOL CALLBACK GeneralDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

          SendDlgItemMessage(hDlg,IDC_DEFEXT,EM_LIMITTEXT,11,0);

 

BOOL CALLBACK SyntaxDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

          SendMessage(GetDlgItem(hDlg,IDC_EXT),EM_LIMITTEXT,249,0);

 

µðÆúÆ® È®ÀåÀÚ¸¦ ±â¾ïÇÏ´Â SOption::DefExt´Â Å©±â°¡ 12À̹ǷΠ½ÇÁ¦ ÀԷ¹ÞÀ» ¼ö ÀÖ´Â ¹®ÀÚ´Â 11ÀÚ±îÁöÀÌ´Ù. ºÐ¼®±âÀÇ È®ÀåÀÚ ¸ñ·Ïµµ 250¹ÙÀÌÆ® ±æÀ̸¦ °¡Áö¹Ç·Î 249±îÁö¸¸ ÀÔ·Â¹Þ¾Æ¾ß ÇÑ´Ù. ÀÌ ¹®Àå¿¡´Â ¶ÇÇÑ IDC_DEFEXT ÄÁÆ®·Ñ¿¡ ´ëÇØ ±æÀ̸¦ Á¦ÇÑÇÏ´Â ¿ÀŸ±îÁö Àִµ¥ IDC_DEFEXT¸¦ IDC_EXT·Î ¹Ù²ã¾ß ÇÑ´Ù. ÀÌ¿Ü¿¡ PrintDlgProc¿¡ ¸Ó¸®¸», ²¿¸®¸»À» ÀԷ¹޴ ¿¡µðÆ®¿¡ ¹®ÀÚ¼ö¸¦ Á¦ÇÑÇÏ´Â Äڵ尡 Àִµ¥ ÀÌ ÄÚµå´Â Á¦´ë·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. ¶È°°Àº ÄÚµåÀε¥ ¸Â´Â °÷µµ ÀÖ°í Ʋ¸° °÷µµ ÀÖ°í ÄÁÆ®·ÑÀÇ ID±îÁö Ʋ¸° °É·Î ºÁ¼­ °³¹ßÀÚ°¡ ÄÚµùÇÏ´Ù°¡ Á¶±Ý Á¹¾Ò´ø °Í °°´Ù. ´ÙÀ½Àº Project.cpp¸¦ ¼öÁ¤ÇÏÀÚ.

 

BOOL CALLBACK DgProjectProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

                        SendMessage(TreeView_GetEditControl(hPrjTree),EM_LIMITTEXT,31,0);

 

BOOL CALLBACK DgNewProjectProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

          SendDlgItemMessage(hDlg,IDC_PRJNEWFILE,EM_LIMITTEXT,MAX_PATH-1,0);

          SendDlgItemMessage(hDlg,IDC_PRJNEWNAME,EM_LIMITTEXT,31,0);

          SendDlgItemMessage(hDlg,IDC_PRJNEWDESC,EM_LIMITTEXT,127,0);

 

¹­À½ÀÇ À̸§Àº 32ÀÚ±îÁöÀ̹ǷΠÀԷ¹ÞÀ» ¼ö ÀÖ´Â ¹®ÀÚ´Â 31ÀÚ±îÁö¿©¾ß ÇÑ´Ù. »õ ÇÁ·ÎÁ§Æ® ´ëÈ­»óÀÚ´Â ±æÀÌ´Â Á¦´ë·Î ½è´Âµ¥ ´ë»ó ÄÁÆ®·ÑÀÇ ID°¡ ¸ðµÎ IDC_PRJNEWFILE·Î µÇ¾î ÀÖ´Ù. ID¸¦ ¸ðµÎ À§ ÄÚµåó·³ ¹Ù²ã¾ß ÇÑ´Ù. ÄÁÆ®·ÑÀÇ ID±îÁö À߸ø ¾µ Á¤µµ·Î ²Ï ¸¹ÀÌ Á¹·È´ø ¸ð¾çÀÌ´Ù.

´Ù.¹ö±× ¼öÁ¤

´ÙÀ½Àº ½±°Ô ¹ß°ßÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ ¹ö±×µéÀÌ´Ù. ´Ü¼øÇÑ ¿ÀŸ·Î ¹ß»ýÇÑ ¹ö±×µµ ÀÖ°í ½Ç¼ö·Î ´©¶ôÇÑ Äڵ嵵 Àִµ¥ ±×´ÙÁö Ä¡¸íÀûÀÎ ¹ö±×´Â ¾Æ´ÏÁö¸¸ ¹ß°ßµÈ ÀÌ»ó ÀÏ´Ü ¼öÁ¤Çϱâ·Î ÇÑ´Ù.  ÀÌ ½Ç½ÀÀ» ÇØ º¸¸é ¿Ö ¹ö±×¶ó´Â °ÍÀÌ »ý±â´ÂÁö ¾î¶² Á¡À» ÁÖÀÇÇØ¾ß ÇÏ´ÂÁö¸¦ ´À³¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 

bLineEnd °ü¸® ¹ö±×

ApiEdit´Â ÀÚµ¿ °³ÇàµÈ ÁÙÀÇ ³¡°ú ´ÙÀ½ Á٠óÀ½ À§Ä¡¸¦ ±¸ºÐÇϱâ À§ÇØ bLineEnd¶ó´Â º¯¼ö¸¦ »ç¿ëÇϸç ÀÌ º¯¼ö·Î ij·µÀÇ À§Ä¡¸¦ °áÁ¤ÇÑ´Ù. ÀÌ º¯¼ö·Î ÀÎÇØ ¿ÀÇÁ¼Â¸¸À¸·Î ±¸ºÐµÇÁö ¾Ê´Â µÎ À§Ä¡¸¦ ±¸ºÐÇÒ ¼ö ÀÖ´Ù. ij·µÀÇ Á¤È®ÇÑ À§Ä¡¸¦ °áÁ¤ÇÏ·Á¸é ij·µÀ» À̵¿ÇÏ´Â ¸ðµç ·çƾ¿¡¼­ ÀÌ º¯¼ö¸¦ °ü¸®ÇØ¾ß Çϴµ¥ »óÇÏ À̵¿ ·çƾ¿¡¼­ ÀÌ º¯¼ö¸¦ À߸ø °ü¸®ÇÏ´Â ¹ö±×°¡ ÀÖ´Ù.

 

int CApiEdit::GetXPosOnLine(int r,int DestX)

{

     ....

    if (p-buf==pLine[r].End && buf[p-buf]!='\r' && buf[p-buf]!=0) {

          bLineEnd=TRUE;

     } else {

          bLineEnd=FALSE;

     }

     return p-buf;

}

 

¸¶Áö¸· Á¶°Ç¹®ÀÎ buf[p-buf]!=0ÀÌ buf[off]!=0¶ó°í µÇ¾î ÀÖ¾ú´Âµ¥ ÀÌ´Â ´Ü¼øÇÑ ¿ÀŸÀÌ´Ù. ÇöÀç À§Ä¡°¡ ÀÚµ¿ °³ÇàµÈ ÁÙ ³¡ÀÏ °æ¿ì bLineEnd¸¦ TRUE·Î º¯°æÇ϶ó´Â ¸í·É¹®Àε¥ Á¶°ÇÀÌ À߸ø ¼³Á¤µÇ¾î ÀÖ¾î ¹®¼­ ³¡À» ÀÚµ¿ °³ÇàµÈ ÁÙ ³¡À¸·Î ¿ÀÆÇÇÏ´Â ¹®Á¦°¡ ÀÖ¾ú´Ù. ±×·¡¼­ ¹®¼­ ³¡À¸·Î À̵¿ÇÑ ÈÄ À§·Î ¿Ã¶ó°¡¸é ij·µÀÇ À̵¿ÀÌ ºÎÀÚ¿¬½º·¯¿öÁø´Ù. ±×·±µ¥ À§ ÄÚµå´Â ±æÀÌ°¡ ¾µµ¥¾øÀÌ ±æ¹Ç·Î ´ÙÀ½ ÇÑ ÁÙ·Î Á» ´õ °£´ÜÇÏ°Ô ÁÙÀÌ´Â °Ô ³ªÀ» °Í °°´Ù.

 

     bLineEnd=(p-buf==pLine[r].End && buf[p-buf]!='\r' && buf[p-buf]!=0);

 

¶È°°Àº Á¶°ÇÀ» ÆÇ´ÜÇÏ´Â °°Àº ÄÚµåÀ̱â´Â ÇÏÁö¸¸ ÀÌ·¸°Ô µÇ¸é Äڵ尡 Á¶±Ý ´õ ¾î·Á¿ö º¸À̱â´Â ÇÑ´Ù. GetOffFromXY¿¡µµ µ¿ÀÏÇÑ ¿ÀŸ°¡ Àִµ¥ ¸¶Áö¸· Á¶°Ç¹®ÀÇ buf[off]!=0À» buf[p-buf]!=0À¸·Î ¼öÁ¤ÇÏ¸é µÈ´Ù. ¿ª½Ã ÇÑ ÁÙ·Î ÁÙÀδÙ.

 

int CApiEdit::GetOffFromXY(int x, int y)

{

     ....

    bLineEnd=(p-buf==pLine[r].End && buf[p-buf]!='\r' && buf[p-buf]!=0);

     return p-buf;

}

 

ÇÁ·ÎÁ§Æ® ¸ñ·Ï °ü¸®

Ž»ö±â Æ˾÷ ¸Þ´º¿¡¼­ "DangeunÀ¸·Î ÆíÁý Ç׸ñ"À» ¼±ÅÃÇÏ¿© ÆÄÀÏÀ» ¿­¸é¼­ ´ç±ÙÀ» ½ÇÇàÇÒ ¶§ ¿­¾î ³õÀº ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀÌ º¹¿øµÇÁö ¾Ê´Â´Ù. ±×·¡¼­ ÀÚÁÖ ¾²´Â ÇÁ·ÎÁ§Æ®¸¦ µî·ÏÇØ ³õ¾Ò¾îµµ Æ˾÷ ¸Þ´º·Î ´ç±ÙÀ» ÇÑ ¹ø ½ÇÇàÇϱ⸸ Çϸé ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀÌ Ç㹫ÇÏ°Ôµµ »èÁ¦µÇ¾î ¹ö¸°´Ù. OnTimer¿¡¼­ Àμö·Î Àü´ÞµÈ °ªÀ» Á¡°ËÇϱâ Àü¿¡ ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀ» ¸ÕÀú Àоî¾ß ÇÑ´Ù.

 

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     switch (wParam) {

     case 100:

          KillTimer(hWnd,100);

          if (Option.bReloadProject) {

              nEditing=SHRegReadInt(SHCU,KEY"Project","Num",0);

              for (i=1;i<=nEditing;i++) {

                   wsprintf(szKey,"Project%d",i);

                   SHRegReadString(SHCU,KEY"Project",szKey,"",Path,MAX_PATH);

                   LoadProject(Path,FALSE);

              }

          }

 

          if (__argc > 1) {

              OpenFromFile(__argv[1]);

              break;

          }

          ....

 

if (Option.bReloadProject) ºí·ÏÀÌ case 100ÀÇ Á¦ÀÏ ¾Æ·¡¿¡ ÀÖ¾ú´Âµ¥ Àμö·Î ÆÄÀϸíÀÌ Àü´ÞµÈ °æ¿ì ÀÌ ÆÄÀÏÀ» ¿­°í °ð¹Ù·Î breakÇØ ¹ö¸®±â ¶§¹®¿¡ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÈ ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀÌ Á¦´ë·Î º¹±¸µÇÁö ¾Ê¾Ò´Ù. ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀ» ÀÏ´Ü ¸ÕÀú ¿­¾î ³õ°í Àμö¸¦ Á¡°ËÇϵµ·Ï ÄÚµåÀÇ ¼ø¼­¸¸ ¹Ù²Ù¸é µÈ´Ù.

FTP ·çƾ ¹ö±×

Internet.cpp¿¡ ¸î°¡Áö °£´ÜÇÑ ¹ö±×°¡ ÀÖ´Ù. DgFtpDownÇÔ¼ö¿¡ ¿ø°ÝÁöÀÇ ÆÄÀÏÀ» ´Ý´Â ÇÔ¼ö È£ÃâÀÌ ºüÁ³´Ù.

 

int DgFtpDown(TCHAR *Path, TCHAR *&Text)

{

     ....

    InternetCloseHandle(hRemote);

EndDown:

     DgFtpUnConnect();

NetFail:

     ....

 

¹Ù·Î ¾Æ·¡ÁÙ¿¡¼­ FTP ¿¬°áÀ» ²÷À¸¹Ç·Î º° »ó°ü¾øÀÌ º¸À̱â´Â ÇÏÁö¸¸ ÆÄÀÏÀ» ¿­¾úÀ¸¸é ´Ý´Â °ÍÀÌ ¿øÄ¢À̹ǷΠ¸ÕÀú ´Ý°í ¿¬°áÀ» ²÷´Â °ÍÀÌ ¹Ù¶÷Á÷ÇÏ´Ù. ´ÙÀ½ ÄÚµå´Â ÆÄÀÏÀÇ ¼Ó¼ºÀ¸·ÎºÎÅÍ µð·ºÅ丮ÀÎÁö Á¶»çÇÏ´Â Á¶°Ç½ÄÀÌ´Ù.

 

void DgFtpAddFile(HWND hDlg,WIN32_FIND_DATA wfd)

{

     ....

     if (strcmp(wfd.cFileName,"»óÀ§ µð·ºÅ丮·Î À̵¿")!=0) {

        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

              LI.iImage=0;

          else

              LI.iImage=1;

     } else {

     ....

        if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {

              lstrcpy(szTmp,"<µð·ºÅ丮>");

          } else {

              itoa(wfd.nFileSizeLow,szTmp,10);

          }

 

µð·ºÅ丮¿¡ ´Ù¸¥ ¼Ó¼ºÀÌ °°ÀÌ ¼³Á¤µÇ¾î ÀÖÀ» ¼öµµ ÀÖÀ¸¹Ç·Î ==·Î ºñ±³Çؼ­´Â ¾ÈµÇ¸ç ¹Ýµå½Ã &·Î ³í¸®°öÀ» ÃëÇÑ °ªÀÌ 0ÀÌ ¾Æ´ÑÁö ºÁ¾ß ÇÑ´Ù. µð·ºÅ丮¿¡ ¼û±è ¼Ó¼ºÀ̳ª º¸Á¸ ¼Ó¼º µûÀ§°¡ °°ÀÌ ¼³Á¤µÇ¾î ÀÖ´Ù¸é µð·ºÅ丮·Î ÀÎÁ¤µÇÁö ¾Ê´Â ¹®Á¦°¡ ÀÖÀ¸³ª Çö½ÇÀûÀ¸·Î´Â ±×·± °æ¿ì°¡ µå¹°±â ¶§¹®¿¡ º° ¹®Á¦°¡ ¾ø´Â °Íó·³ º¸¿´´Ù. ÀÌ·± ¹ö±×´Â ´Ù¾çÇÑ È¯°æ¿¡¼­ Å×½ºÆ®ÇغÁ¾ß ¹ß°ßÇÒ ¼ö ÀÖ´Ù.

ºÐ¼®±âÀÇ È®ÀåÀÚ ÆǺ° ¹ö±×

SelectParser ÇÔ¼ö´Â Àü´ÞµÈ ÆÄÀϸíÀÇ È®ÀåÀÚ¸¦ º¸°í ºÐ¼®±â¸¦ ¼±ÅÃÇÏ´Â ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â Àü´ÞµÈ È®ÀåÀÚ°¡ °¢ ºÐ¼®±âÀÇ È®ÀåÀÚ ¸ñ·Ï¿¡ Æ÷ÇԵǾî ÀÖ´ÂÁö¸¦ ¹®ÀÚ¿­ °Ë»öÇϸç È®ÀåÀÚ°¡ Æ÷ÇÔµÈ ¸ñ·ÏÀ» °¡Áø ºÐ¼®±â¸¦ ¼±ÅÃÇÑ´Ù. ÀÌ °£´ÜÇÑ Äڵ忡 µÎ °¡Áö ¿À·ù°¡ ÀÖ´Ù. ¿ø·¡ÀÇ Äڵ带 ¸ÕÀú º¸ÀÚ.

 

void SelectParser(CApiEdit &Ae,TCHAR *path)

{

     TCHAR ext[_MAX_EXT];

     int i;

     int ID=0;

 

     _splitpath(path,NULL,NULL,NULL,ext);

     CharLower(ext);

     for (i=1;i<=3;i++) {

          if (strstr(Option.arExt[i],ext+1)!=0) {

              ID=i;

              break;

          }

     }

 

     Ae.SetParser(ID);

     Option.SetStyleColor(Ae.GetParser());

}

 

Àü´ÞµÈ ÆÄÀÏÀÇ È®ÀåÀÚ¸¦ ext¿¡ ºÐ¸®Çϸé(¿¹¸¦ µé¾î .txt) È®ÀåÀÚ´Â Á¡À» Á¦¿ÜÇÑ ext+1ºÎÅÍ ½ÃÀ۵ȴÙ. ºÐ¼®±â¸¦ ¼øȸÇϸ鼭 strstr ÇÔ¼ö·Î ext+1¹®ÀÚ¿­ÀÌ Æ÷ÇԵǾî ÀÖ´ÂÁö ã´Âµ¥ ÀÌ ÇÔ¼ö´Â ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÏ¿© Á¤È®ÇÏ°Ô ÀÏÄ¡ÇÏ´Â ¹®ÀÚ¿­¸¸ ã´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ¼³Á¤ ´ëÈ­»óÀÚ¿¡¼­ CPP ¶Ç´Â Cpp¶ó°í ÁöÁ¤ÇØ ³õÀ¸¸é source.cpp¸¦ ¿­ ¶§´Â ´ë¼Ò¹®ÀÚ ±¸¼ºÀÌ ´Ù¸£¹Ç·Î C ºÐ¼®±â°¡ ¼±ÅõÇÁö ¾Ê´Â´Ù. ÆÄÀÏÀÇ È®ÀåÀÚ¸¦ ¼Ò¹®ÀÚ·Î ¸¸µé¾î ³õ°í »ç¿ëÀÚ°¡ ¼³Á¤ÇØ ³õÀº È®ÀåÀÚ ¸ñ·Ïµµ ¿ª½Ã ¼Ò¹®ÀÚ·Î ¸¸µç ÈÄ ºñ±³ÇØ¾ß Á¤È®ÇÑ ºñ±³°¡ °¡´ÉÇÏ´Ù.

µÎ ¹ø° ¹®Á¦´Â ¹®ÀÚ¿­ÀÇ Æ÷ÇÔ ¿©ºÎ¸¸À» °Ë»çÇϱ⠶§¹®¿¡ ºÎºÐ ¹®ÀÚ¿­À» À߸ø °Ë»öÇÏ´Â °ÍÀÌ´Ù. °¡·É È®ÀåÀÚ p¸¦ »ç¿ëÇÏ´Â ÆÄÀÏÀÌ ÀÖ´Ù¸é ÀÌ È®ÀåÀÚ´Â CºÐ¼®±âÀÇ µðÆúÆ® È®ÀåÀÚ ¸ñ·ÏÀÎ c;cpp;h;hpp¿¡ Æ÷ÇԵǾî ÀÖ´Â °ÍÀ¸·Î À߸ø ÆÇ´ÜÇÑ´Ù. È®ÀåÀÚ°¡ ¹Ýµå½Ã ¼¼ ÀÚ°¡ ¾Æ´Ò ¼öµµ ÀÖÀ¸¹Ç·Î ºÎºÐ ¹®ÀÚ¿­·Î Æ÷ÇÔ ¿©ºÎ¸¦ ÆÇ´ÜÇÏ´Â °ÍÀº ¿ÇÁö ¾Ê´Ù. 1.0¿¡¼­ ÀÌ ¹®Á¦°¡ µå·¯³ªÁö ¾ÊÀº ÀÌÀ¯´Â 1¹ø ºÐ¼®±âÀÎ C¿¡¼­¸¸ ÇÑ ÀÚÂ¥¸® È®ÀåÀÚ¸¦ Á¤ÀÇÇϱ⠶§¹®ÀÌ´Ù. ¸¸¾à C ºÐ¼®±â¿Í HTML ºÐ¼®±âÀÇ ¼ø¼­°¡ ¹Ù²î¾î ÀÖ´Ù¸é *.h ÆÄÀÏÀº HTML ÆÄÀÏ·Î ±¸¹® ºÐ¼®µÇ¾úÀ» °ÍÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void SelectParser(CApiEdit &Ae,TCHAR *path)

{

    TCHAR ext[_MAX_EXT+1];

    TCHAR arExt[255];

     int i;

     int ID=0;

 

     _splitpath(path,NULL,NULL,NULL,ext);

    CharLower(ext);

    lstrcat(ext,";");

     for (i=1;i<=3;i++) {

        lstrcpy(arExt,Option.arExt[i]);

        CharLower(arExt);

        lstrcat(arExt,";");

        if (strstr(arExt,ext+1)!=0) {

              ID=i;

              break;

          }

     }

 

     Ae.SetParser(ID);

     Option.SetStyleColor(Ae.GetParser());

}

 

¼³Á¤ÀÇ È®ÀåÀÚ ¸ñ·ÏÀ» Àӽà ¹öÆÛ arExt¿¡ º¹»çÇÑ ÈÄ ¼Ò¹®ÀÚ·Î ¹Ù²Ù°í °Ë»ö ´ë»ó È®ÀåÀÚµµ ¼Ò¹®ÀÚ·Î ¹Ù²Ù¾î °Ë»öÇÔÀ¸·Î½á ´ë¼Ò¹®ÀÚ ¹®Á¦¸¦ ÇØ°áÇß´Ù. ºÎºÐ ¹®ÀÚ¿­ °Ë»ö ¹®Á¦´Â ÆÄÀÏÀÇ È®ÀåÀÚ µÚ¿¡ ;À» ºÙÀÌ°í ¼³Á¤ »óÅÂÀÇ È®ÀåÀÚ ¸ñ·Ï µÚ¿¡µµ ;À» ºÙ¿© ÇØ°áÇß´Ù. È®ÀåÀÚ h¿¡ ´ëÇØ h;À» ãÀ¸¹Ç·Î htmlÀÇ ºÎºÐ ¹®ÀÚ¿­ h°¡ °Ë»öµÇÁö ¾Ê´Â´Ù.

´ÙÁß ¸ð´ÏÅÍ È¯°æÀÇ Æ˾÷ ¸Þ´º

´ÙÁß ¸ð´ÏÅÍ È¯°æ¿¡¼­ º¸Á¶ ¸ð´ÏÅÍ°¡ ÁÖ ¸ð´ÏÅÍÀÇ ¿ÞÂÊ¿¡ ÀÖÀ» ¶§, Áï À½¼ö ÁÂÇ¥¿¡ À©µµ¿ì°¡ ÀÖÀ» ¶§ Æ˾÷ ¸Þ´º°¡ ¾û¶×ÇÑ °÷¿¡ ¿­¸°´Ù. Æ˾÷ ¸Þ´º°¡ À½¼ö ÁÂÇ¥¿¡ ¿­¸®Áö ¸øÇÏ´Â ¹®Á¦°¡ ÀÖ´Â °ÍÀÌ´Ù. ApiEditText.cppÀÇ ´ÙÀ½ ¼Ò½º¸¦ ¼öÁ¤ÇÑ´Ù.

 

void CApiEdit::OnContextMenu(HWND hWnd, HWND hwndContext, UINT xPos, UINT yPos)

{

     ....

    TrackPopupMenu(hPopup,TPM_LEFTALIGN,(short)xPos,(short)yPos,0,hWnd,NULL);

     DestroyMenu(hPopup);

}

 

TrackPopupMenuÀÇ Àμö·Î Àü´ÞµÇ´Â xPos, yPos¸¦ (short) Áï, ºÎÈ£ÀÖ´Â 16ºñÆ® Á¤¼öÇüÀ¸·Î ij½ºÆÃÇϱ⸸ ÇÏ¸é µÈ´Ù. Find.cppÀÇ DGOutputProc¿Í FileWnd.cppÀÇ DGFileProc¿¡µµ µ¿ÀÏÇÑ ¹ö±×°¡ ÀÖÀ¸¹Ç·Î ¸ðµÎ (short)·Î ij½ºÆÃÇÑ´Ù.

 

LRESULT CALLBACK DGOutputProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

        TrackPopupMenu(hPopup, TPM_LEFTALIGN, (short)LOWORD(lParam), (short)HIWORD(lParam),

              0, hWnd, NULL);

 

LRESULT CALLBACK DGFileProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

        TrackPopupMenu(hPopup, TPM_LEFTALIGN, (short)LOWORD(lParam), (short)HIWORD(lParam),

              0, hWnd, NULL);

 

WM_CONTEXTMENU ¸Þ½ÃÁö´Â ¸¶¿ì½º°¡ ´­·¯Áø È­¸é ÁÂÇ¥¸¦ Àü´ÞÇϴµ¥ ´ÙÁß ¸ð´ÏÅÍ È¯°æ¿¡¼­´Â À½¼ö°¡ µÉ ¼öµµ ÀÖ´Ù. ±×·¯³ª ¸Þ½ÃÁö Å©·¡Ä¿ÀÇ ¸ÅÅ©·Î´Â ÀÌ ÁÂÇ¥¸¦ UINT·Î ij½ºÆÃÇؼ­ Àü´ÞÇϱ⠶§¹®¿¡ ÀÌ °ªÀ» ¹Ï°í ±×´ë·Î ¾²¸é À½¼ö ÁÂÇ¥¸¦ Ç¥ÇöÇÏÁö ¸øÇÑ´Ù. ÃÖ½ÅÀÇ ´å³Ý°ú ÇÔ²² ¹èÆ÷µÇ´Â Çì´õ ÆÄÀÏ¿¡µµ µ¿ÀÏÇÑ ¹ö±×°¡ ÀÖ´Ù.

°á±¹ ÀÌ ¹ö±×´Â ¸Þ½ÃÁö Å©·¡Ä¿ÀÇ ¹ö±×ÀÌ¸ç °³¹ßÀڴ ǥÁØ Çì´õ ÆÄÀÏÀ» ¹Ï°í ¾´ Á˹ۿ¡ ¾ø´Ù. ÀÌ ¹ö±×¸¦ ¹Ìó È®ÀÎÇÏÁö ¸øÇÑ ÀÌÀ¯´Â °³¹ßÀÚ°¡ °¡³­Çؼ­ ´ÙÁß ¸ð´ÏÅÍ È¯°æÀ» °¡Áö°í ÀÖÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. °³¹ßÀÚ´Â ÇÊ¿äÇÒ °æ¿ì ÀÌ·¸°Ô ³í¸® Á¤¿¬ÇÏ°Ô ¿À¸®¹ßÀ» ³»¹Ð ¼öµµ ÀÖ¾î¾ß ÇÑ´Ù. °í ¸»ÇÏ°í ½ÍÁö¸¸ »ç½Ç ¸ðµç ¹ö±×ÀÇ Ã¥ÀÓÀº Å×½ºÆ®¸¦ Á¦´ë·Î ÇÏÁö ¸øÇÑ °³¹ßÀÚ¿¡°Ô ÀÖ´Ù°í ÇÏ´Â °ÍÀÌ ¿Ç´Ù.

±¸¹® ºÐ¼®±âÀÇ ¹«ÇÑ ·çÇÁ

HTML ±¸¹® ºÐ¼®±â¿¡ ¾ÆÁÖ À§ÇèÇÑ ¹ö±×°¡ ÀÖ´Ù. HTMLÀº ASP¿Í PHP ½ºÅ©¸³Æ®¸¦ Æ÷ÇÔÇÒ ¼ö Àִµ¥ ASP ºí·ÏÀÎ <% %> °ýÈ£¾È¿¡¼­ ¹®ÀÚ¿­ ÀÔ·ÂÀ» À§ÇØ µû¿ÈÇ¥¸¸ ÀÔ·ÂÇϸé Áï»çÇÏ´Â ¾ÆÁÖ ½É°¢ÇÑ ¹ö±×ÀÌ´Ù. ¿¹¸¦ µé¾î ´ÙÀ½°ú °°Àº °£´ÜÇÑ ASP ¹®¼­¸¦ ¸¸µç´Ù°í ÇÑ´Ù¸é ÀÔ·ÂÇÏ´Â Áß¿¡ Àá½Ã µû¿ÈÇ¥¸¦ ¿­±â¸¸ ÇÏ°í ´ÝÁö´Â ¾ÊÀº ¹Ì¿Ï¼º ¹®ÀÚ¿­ÀÌ Á¸ÀçÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

 

<%

num=1234

name=dbrec("name")

 

if name="Admin" then

  Response.Write "°ü¸®ÀÚÀÔ´Ï´Ù."

else

  Response.Write "¼Õ´ÔÀÔ´Ï´Ù."

end if

%>

 

HTML ±¸¹® ºÐ¼®±â´Â ASP ÄÁÅؽºÆ®¿¡¼­ µû¿ÈÇ¥¸¦ ¿­¸é ASPSTRING ÄÁÅؽºÆ®·Î ÀüȯÇÏ°í ´Ý´Â µû¿ÈÇ¥¸¦ ¸¸³ª¾ß¸¸ ASP ÄÁÅؽºÆ®·Î µ¹¾Æ¿Â´Ù. ¸¸¾à ÀÔ·ÂÁßÀÇ ¹Ì¿Ï¼º ¹®ÀÚ¿­À» ¸¸³ª¸é ºÐ¼® Á¤º¸¿¡ ASPSTRINGÀ¸·Î ³¡ÀÌ ³µ´Ù´Â Á¤º¸¸¸ ±â·ÏÇÏ°í ÇÑ ÁÙ ºÐ¼®À» ¿Ï¼ºÇÑ´Ù. ´ÙÀ½ ÁÙÀ» ºÐ¼®ÇÒ ¶§´Â Ç×»ó ÀÌÀü ÁÙÀÇ ÄÁÅؽºÆ®¸¦ ¸ÕÀú ±â·ÏÇÏ°í ±¸¹® ºÐ¼®À» ½ÃÀÛÇϴµ¥ ÀÌ Ã³¸®°¡ ºüÁø °ÍÀÌ´Ù. Parse.cpp¿¡¼­ HTML ºÐ¼®±âÀÇ ParseLine ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void CParseHtml::ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)

{

     ....

     switch(Context) {

     case HTML_CON_NORMAL:

     case HTML_CON_BRACKET:

          MakeParseInfo(nLine,nUnit,s,HTML_STYLE_NORMAL);

          break;

     case HTML_CON_COMMENT:

          MakeParseInfo(nLine,nUnit,s,HTML_STYLE_COMMENT);

          break;

     case HTML_CON_VALUE1:

     case HTML_CON_VALUE2:

          MakeParseInfo(nLine,nUnit,s,HTML_STYLE_VALUE);

          break;

     case HTML_CON_ASP:

          MakeParseInfo(nLine,nUnit,s,HTML_STYLE_ASP);

          break;

    case HTML_CON_ASPSTRING:

        MakeParseInfo(nLine,nUnit,s,HTML_STYLE_ASPSTRING);

        break;

     ....

 

HTML ºÐ¼®±â´Â 12°³ÀÇ ÄÁÅؽºÆ®¸¦ Á¤ÀÇÇϴµ¥ À¯µ¶ ASPSTRING ÄÁÅؽºÆ®¿¡ ´ëÇؼ­¸¸ ºÐ¼® Á¤º¸ ÃʱâÈ­¸¦ ´©¶ôÇß´Ù. ¾î¶»°Ô º¸¸é ´Ü¼øÇÑ Å»ÀÚ·Î º¼ ¼öµµ ÀÖÁö¸¸ ÀÌ Å»ÀÚÀÇ È¿°ú´Â ¹«½Ã ¹«½ÃÇؼ­ µû¿ÈÇ¥¸¦ ¿­±â¸¸ ÇÏ¸é ´ç±ÙÀ» Áï»ç½ÃÄÑ ¹ö¸± Á¤µµ·Î Ä¡¸íÀûÀÌ´Ù. ÀÌ·± Ä¡¸íÀûÀÎ ¹ö±×´Â ´ëü·Î ¹ß°ßÇϱ⠽¬¿îµ¥ °³¹ßÀÚ°¡ ASP ÄÚµùÀ» ÇÒ ÀÏÀÌ ¾ø´Ù º¸´Ï Å×½ºÆ®¸¦ Á¦´ë·Î ÇÏÁö ¸øÇß´ø °ÍÀÌ´Ù.

ÀÌ·¸°Ô ¼öÁ¤Çϸé ÀÏ´Ü ¹Ì¿Ï¼º ¹®ÀÚ¿­ÀÌ ¸¸µé¾îÁ®µµ ´Ý´Â µû¿ÈÇ¥¸¦ ¸¸³¯ ¶§±îÁö °è¼Ó ¹®ÀÚ¿­·Î ÀνÄÇϹǷΠÁ×Áöµµ ¾Ê°í Àß µ¿ÀÛÇÑ´Ù. µû¿ÈÇ¥¸¦ ¿­±â¸¸ ÇßÁö ´ÝÁö´Â ¾Ê¾ÒÀ¸¹Ç·Î ³¡±îÁö ¹®ÀÚ¿­·Î ºÐ¼®ÇÏ´Â °ÍÀÌ Æ²¸®Áö´Â ¾Ê¾ÒÁö¸¸ Å« ¹®¼­¸¦ ÆíÁý ÁßÀÏ ¶§´Â ÀÌ·± µ¿ÀÛÀÌ ¹«Ã´ ºÒÆíÇÒ ¼öµµ ÀÖ´Ù. ASP ºí·Ï ¾Æ·¡ÂÊÀÇ HTML ÄÚµå±îÁöµµ ¹®ÀÚ¿­ÀÇ ÀϺηΠÇؼ®ÇØ ¹ö¸®¹Ç·Î µû¿ÈÇ¥¸¸ ÀÔ·ÂÇÏ¸é ¾Æ·§ÂÊÀÇ ÄÚµå »ö±òÀÌ ¹«ÀÛÀ§·Î º¯ÇÏ°Ô µÉ °ÍÀÌ´Ù. ±×·¡¼­ ASPSTRING ÄÁÅؽºÆ®ÀÏ ¶§´Â ´Ý´Â µû¿ÈÇ¥»Ó¸¸ ¾Æ´Ï¶ó ASP ºí·ÏÀ» ³¡³»´Â %> µµ °Ë»öÇØ º¸°í ASP ºí·Ï¹ÛÀ¸·Î´Â ¹®ÀÚ¿­ÀÌ Áö¼ÓµÇÁö ¾Êµµ·Ï °³¼±ÇØ º¸ÀÚ. ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

void CParseHtml::ParseLine(CApiEdit &ae,int nLine,Ae_PrintInfo *pi)

{

     ....

     for (i=s;i<e;i++) {

          switch(Context) {

          ....

          case HTML_CON_ASPSTRING:

           if (ae.buf[i]=='%' && ae.buf[i+1]=='>') {

               i++;

               MakeParseInfo(nLine,nUnit,i+1,HTML_STYLE_NORMAL);

               Context=HTML_CON_NORMAL;

               idpos=i+1;

           }

              if (ae.buf[i]=='\"') {

                   MakeParseInfo(nLine,nUnit,i+1,HTML_STYLE_ASP);

                   Context=HTML_CON_ASP;

                   idpos=i+1;

              }

              continue;

          ....

          case HTML_CON_PHPSTRING:

           if (ae.buf[i]=='?' && ae.buf[i+1]=='>') {

               i++;

               MakeParseInfo(nLine,nUnit,i+1,HTML_STYLE_NORMAL);

               Context=HTML_CON_NORMAL;

               idpos=i+1;

               continue;

           }

              if (ae.buf[i]=='\"') {

                   MakeParseInfo(nLine,nUnit,i+1,HTML_STYLE_PHP);

                   Context=HTML_CON_PHP;

                   idpos=i+1;

              }

              continue;

          ....

 

ASP¿Í PHP ¸ðµÎ ¹®ÀÚ¿­ÀÌ ¹Ì¿Ï¼ºÀÏÁö¶óµµ ½ºÅ©¸³Æ® ºí·ÏÀÌ ³¡³ª¸é ¹®ÀÚ¿­µµ ´ÝÈù °ÍÀ¸·Î ÆÇ´ÜÇÑ´Ù. ÀÌ µÎ ½ºÅ©¸³Æ®¿¡ ´ëÇÑ ºÐ¼®±â´Â Å°¿öµå ¸ñ·Ïµµ ¿ÏÀüÇÏÁö ¾Ê°í Á» ´õ ½ºÅ¸ÀÏÀ» ¼¼ºÐÈ­ÇÒ ÇÊ¿äµµ Àִµ¥ Â÷ÈÄ¿¡ Àü¹®°¡µéÀÇ µµ¿òÀ» ¹Þ¾Æ¾ß ÇÒ °Í °°´Ù.

´Ü¾î Á¤·Ä ¹ö±×

Á¤·ÄÀ» ¼öÇàÇÏ´Â ÇÙ½ÉÇÔ¼öÀÎ GetLineÀº ºñ±³Àû ¿Ïº®ÇÏ°Ô ÀÛ¼ºµÇ¾î ÀÖÁö¸¸ ÇÑ±Û ´Ü¾î, ¿µ¹® ´Ü¾î Á¤·ÄÀÏ ¶§ ±Ø´ÜÀûÀÎ »óȲÀ» Àß Ã³¸®ÇÏÁö ¸øÇÏ´Â ¹ö±×°¡ ÀÖ´Ù. ¿É¼Ç¿¡¼­ ÀÌ Á¤·Ä »óŸ¦ ¼±ÅÃÇØ ³õ°í ÇѱÛÀ» ¶ç¿ö¾²Áö ¸»°í ¸ðµÎ ºÙ¿© ¾²¸é ÀÚ¸¦ ´Ü¾î À§Ä¡¸¦ ãÁö ¸øÇØ ´Ù¿îµÈ´Ù. ¹®Á¦ÀÇ ¿øÀÎÀº ´ÙÀ½ Á¶°Ç¹®¿¡ ÀÖ´Ù.

 

if (nWrap==2 || (nWrap==3 && IsPrevDBCS==FALSE)) {

     EndPos=p;

 

ÀÌ Á¶°Ç¹®Àº È¥ÇÕÁ¤·ÄÀÎ °æ¿ì ÇѱÛÀÌ ¹ß°ßµÉ ¶§¸¶´Ù ¶Ç´Â ´Ü¾î Á¤·ÄÀÏ °æ¿ì ¾Õ ±ÛÀÚ°¡ ¿µ¹®À̾úÀ» ¶§ ÀÌ À§Ä¡¸¦ ÀÚ¸¦ È帷Πµî·ÏÇÑ´Ù. ±×·±µ¥ IsPrevDBCSÀÇ µðÆúÆ®°ªÀÌ FALSEÀ̹ǷΠÁÙÀÇ Ã³À½¿¡¼­´Â ÀÌ ÀÚ¸®°¡ ÀÚ¸¦ Èĺ¸ À§Ä¡¶ó°í ÆÇ´ÜÇÏ¸ç µû¶ó¼­ EndPos°¡ ÁÙÀÇ Ã³À½À» °¡¸®Å²´Ù. Á¤·Ä °á°ú ´õ ÀÌ»ó ÀÚ¸¦ À§Ä¡°¡ ¾øÀ¸¹Ç·Î EndPos¸¦ ÃëÇϴµ¥ À̶§ EndPos´Â ½ÃÀÛ À§Ä¡¿Í °°°í µû¶ó¼­ ÁÙÀÇ ±æÀÌ°¡ 0ÀÎ »óÅ·ΠÁ¤·ÄµÇ´Â °ÍÀÌ´Ù. ù ÁÙÀÇ ±æÀÌ°¡ 0À̹ǷΠµÎ ¹ø° ÁÙºÎÅ͵µ °è¼Ó 0ÀÌ°í µû¶ó¼­ ¹®¼­ ±æÀÌ´Â ¹«ÇÑ´ë°¡ µÇ¸ç Á¤·Ä ·çƾÀº °áÄÚ ³¡³ªÁö ¾Ê´Â´Ù.

±×·±µ¥ ¿µ¹®Àº ´Ü¾î Á¤·Ä »óÅ¿¡¼­ ¾Æ¹«¸® ºÙ¿© ½áµµ ´Ù¿îµÇÁö ¾Ê°í Àß Á¤·ÄµÈ´Ù. ¿Ö³ªÇϸé IsPrevDBCSÀÇ µðÆúÆ®°¡ FASLEÀ̹ǷΠ¿µ¹®À¸·Î ½ÃÀÛµÉ ¶§´Â Á٠óÀ½ÀÌ Èĺ¸ À§Ä¡°¡ ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ¸¸¾à ÀÌ º¯¼öÀÇ µðÆúÆ®¸¦ TRUE·Î º¯°æÇÏ¸é ¿µ¹®ÀÏ ¶§ ´Ù¿îµÇ°í ÇѱÛÀÏ ¶§´Â ´Ù¿îµÇÁö ¾ÊÀ» °ÍÀÌ´Ù. ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é Á٠óÀ½¿¡¼­´Â Èĺ¸ À§Ä¡¸¦ µî·ÏÇÏÁö ¸»¾Æ¾ß ÇÑ´Ù. ÀÌ Á¶°ÇÀ» ÆÇ´ÜÇϱâ À§ÇØ Á٠óÀ½À» ±â¾ïÇÏ´Â º°µµÀÇ Æ÷ÀÎÅÍ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù.

 

void CApiEdit::GetLine(int Line, int &s, int &e)

{

     TCHAR *p, *Head;

     ....

          for (acwidth=MarginWidth,Head=p;;) {

          ....

                        if (nWrap==2 || (nWrap==3 && p != Head && IsPrevDBCS==FALSE)) {

                            EndPos=p;

 

Á¤·ÄÀ» ½ÃÀÛÇÒ ¶§ Head¸¦ Á٠óÀ½¿¡ ¸ÂÃç ³õ°í p°¡ Head¿Í °°À» ¶§´Â EndPos¸¦ Èĺ¸ À§Ä¡·Î µî·ÏÇÏÁö ¾Ê¾Ò´Ù. ÁÙÀÇ ½ÃÀÛºÎÅÍ ÀÚ¸£¸é ¹®¼­ ±æÀÌ°¡ ¹«ÇÑ´ë°¡ µÈ´Ù. ÀÌ·¸°Ô µÇ¸é ÇѱÛÀÌ ¿¬ÀÌ¾î ¿Ã ¶§ EndPos´Â ÃʱⰪÀÎ NULLÀ» °¡Áö¸ç ÇÔ¼ö ³¡ÀÇ ´ÙÀ½ Äڵ忡 ÀÇÇØ ÃÖÃÊ·Î È­¸éÆøÀ» ³ÑÀº p°¡ ÁÙ ³¡À¸·Î °è»êµÈ´Ù.

 

     if (nWrap == 1 || EndPos == NULL) {

          p=p;

 

ÀÌ Äڵ忡 ÀÇÇØ ÇÑ±Û ´Ü¾î Á¤·ÄÀÏ ¶§ ¶ç¾î¾²±â¸¦ ÇÏÁö ¾ÊÀ¸¸é ±ÛÀÚ ´ÜÀ§·Î °­Á¦ Á¤·ÄµÈ´Ù. ÀÌ ¹ö±×´Â ÇÁ·Î±×·¥À» ´Ù¿î½ÃÅ°´Â Ä¡¸íÀûÀÎ ¹ö±×ÀÌ¸ç ¼öÁ¤Çϱ⵵ ¾î·ÆÁö ¾ÊÁö¸¸ µðÆúÆ® ¿É¼ÇÀ» È¥ÇÕÁ¤·Ä·Î¸¸ ¸ÂÃç³õ°í ¾²´Ùº¸´Ï ¹Ìó ¹ß°ßÇÏÁö ¸øÇß´Ù. ¿©±â¿¡ ÀÌ·± ¹ö±×°¡ ÀÖ´Ù¸é Àμâ¿ëÀÇ GetLineµµ ¸¶Âù°¡Áö ¹®Á¦°¡ ÀÖÀ¸¹Ç·Î ¶È°°ÀÌ ¼öÁ¤ÇØ¾ß ÇÑ´Ù. ¹®Á¦°¡ °°À¸¹Ç·Î ¼öÁ¤ÇÏ´Â ¹æ¹ýµµ ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù.

ÀÚµ¿°³Çà Åø ¹öÆ° °ü¸®

Åø¹ÙÀÇ Åø ¹öÆ° »óÅ´ OnIdle¿¡¼­ ÁÖ±âÀûÀ¸·Î °ü¸®ÇÑ´Ù. ±×·±µ¥ ÀÚµ¿ °³Çà ¹öÆ°ÀÇ »óÅ¿¡ ¹ö±×°¡ ÀÖ´Ù. ÀÚµ¿ °³Çà ¿É¼ÇÀº ÇѱÛ, ¿µ¹® °¢°¢¿¡ ´ëÇØ ´Ü¾î ´ÜÀ§·Î, ±ÛÀÚ ´ÜÀ§·Î °³ÇàÇÏ´Â ¿É¼ÇÀÌ Àִµ¥ µðÆúÆ®ÀÎ ÇÑ±Û ±ÛÀÚ, ¿µ¹® ´Ü¾î¿¡ ´ëÇؼ­¸¸ Á¦´ë·Î °ü¸®µÈ´Ù. Åø ¹öÆ°ÀÇ »óŸ¦ °ü¸®ÇÏ´Â Äڵ尡 nWrapÀÌ 2ÀÏ ¶§¸¸ ÀÚµ¿ °³ÇàÀÌ ¼±ÅÃµÈ °ÍÀ¸·Î ¿ÀÆÇÇϱ⠶§¹®ÀÌ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

void OnIdle()

{

     ....

        if (pSi->Ae.GetWrap() != 0) {

              SendMessage(hToolBar,TB_SETSTATE,IDM_VIEW_WORDWRAP,

                   MAKELONG(TBSTATE_ENABLED | TBSTATE_CHECKED,0));

          } else {

              SendMessage(hToolBar,TB_SETSTATE,IDM_VIEW_WORDWRAP,MAKELONG(TBSTATE_ENABLED,0));

          }

 

¿ø·¡ ÄÚµå´Â pSi->Ae.GetWrap() == 2 ¿´´Âµ¥ nWrapÀÌ 2ÀÏ ¶§»Ó¸¸ ¾Æ´Ï¶ó 0ÀÌ ¾Æ´Ï±â¸¸ Çϸé ÀÚµ¿ °³Çà »óÅÂÀÎ °ÍÀÌ ¿Ç´Ù.

TexOut ÇÔ¼öÀÇ ÇÑ°è

¹®ÀÚ¿­À» Ãâ·ÂÇÏ´Â ±âº» ÇÔ¼öÀÎ TextOut ÇÔ¼ö´Â 64K¸¦ ³Ñ´Â ¹®ÀÚ¿­À» Çѹø¿¡ Ãâ·ÂÇÏÁö ¸øÇÏ´Â ÇÑ°è°¡ ÀÖ´Ù. ¶ÇÇÑ 64K°¡ µÇÁö ¾Ê´õ¶óµµ ¼öÆò ±æÀÌ°¡ ³Ê¹« ±æ¸é ¿ª½Ã Çѹø¿¡ Ãâ·ÂÇÏÁö ¸øÇÑ´Ù. ´ç±ÙÀÌ ÅؽºÆ® Ãâ·Â¿¡ Á÷Á¢ »ç¿ëÇÏ´Â ÇÔ¼ö´Â ExtTextOutÀε¥ ÀÌ ÇÔ¼öµµ ¿ª½Ã ¶È°°Àº ÇÑ°è°¡ ÀÖ´Ù. 64K Á¤µµ¸é ¾ÆÁÖ ÃæºÐÇÑ ±æÀÌÀÌ°í ÀÌ·¸°Ô ±ä ¹®ÀÚ¿­À» È­¸é¿¡ ÇÑ ¹ø¿¡ Ãâ·ÂÇÒ ÀÏÀÌ ¾øÀ¸¹Ç·Î ÀϹÝÀûÀÎ »óȲ¿¡¼­´Â ÀüÇô ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ±×·¯³ª Á¤¸» ±ä ¹®ÀÚ¿­À» Ãâ·ÂÇÒ ¶§´Â ¾Æ¿¹ Ãâ·Â ÀÚü°¡ µÇÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ´Ù.

»ùÇà ¹®¼­ Áß "¼öÆòÀ¸·Î ±ä ¹®ÀÚ¿­.txt" ÆÄÀÏÀ» ¿­¾î º¸¸é Áß°£ÀÇ ÇÑ ÁÙÀÌ Ãâ·ÂµÇÁö ¾Ê´Â´Ù. ÀÌ ÁÙÀ» ¸¶¿ì½º·Î ¼±ÅÃÇÏ¸é ¹®ÀÚ¿­ÀÌ º¸À̴µ¥ ¼±Åÿ¡ ÀÇÇØ DrawLine ÇÔ¼ö°¡ ¼¼±×¸ÕÆ®¸¦ ³ª´©±â ¶§¹®ÀÌ´Ù. Áï, ±ä ¹®ÀÚ¿­À» ÇÑ ¹ø¿¡ ´Ù Ãâ·ÂÇϸé (Ext)TextOutÀÌ ½ÇÆÐÇϸç 64K ´ÜÀ§·Î Àß¶ó¼­ Ãâ·ÂÇÏ¸é ¼º°øÇÑ´Ù. ¹°·Ð ÀÚµ¿ °³Çà ¿É¼ÇÀ» ¼±ÅÃÇÏ´Â ´õ Æí¸®ÇÑ ¹æ¹ýµµ ÀÖ´Ù. ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é 64K°¡ ³Ñ´Â ¼¼±×¸ÕÆ®¸¦ ¸¸µéÁö ¾ÊÀ¸¸é µÈ´Ù. DrawLineÀÇ ¼¼±×¸ÕÆ® ºÐÇÒ Äڵ忡 ´ÙÀ½ Á¶°ÇÀ» Ãß°¡ÇÑ´Ù.

 

int CApiEdit::DrawLine(HDC hdc, int Line)

{

     ....

     for (;;) {

          for (len=0;;) {

              ....

           if (nowoff+len == pLine[Line].End || len > 4096) {

                   if (SelStart != SelEnd && nowoff >= SelFirst && nowoff < SelSecond) {

                        bInSel=TRUE;

                    } else {

                        bInSel=FALSE;

                   }

                   break;

              }

 

ÁÙ ³¡À» ¸¸³µ´Ù´Â Á¶°Ç¿¡ len > 4096À̶ó´Â Á¶°ÇÀ» OR·Î ¿¬°áÇÏ¿© ±æÀÌ°¡ 4096À» ³Ñ¾î¼­¸é °­Á¦·Î ¼¼±×¸ÕÆ®¸¦ ³ª´©´Â °ÍÀÌ´Ù. ¿©±â¼­ 4096À̶ó´Â °ªÀº ÇÑ ¹ø¿¡ Ãâ·ÂÇÒ¸¸ÇÑ ÃæºÐÇÑ ±æÀÌ·Î ¼±ÅÃµÈ ÀÓÀÇ°ªÀε¥ ±Û²ÃÀÌ Ä¿Áö¸é ÇÑ ¹ø¿¡ Ãâ·ÂÇÒ ¼ö ÀÖ´Â ¼öÆò ±æÀ̵µ ª¾ÆÁö¹Ç·Î 4K Á¤µµÀÇ ´ÜÀ§·Î À߶ú´Ù. Ãâ·Â ´ÜÀ§¸¦ ³ª´« °Í »ÓÀ̹ǷΠ³ª¸ÓÁö ÄÚµå´Â °Çµå¸± ÇÊ¿ä°¡ ¾ø´Ù. ÀÌ Á¶°Ç Ãß°¡¿¡ ÀÇÇØ ¼öÆòÀ¸·Î ¾Æ¹«¸® ±ä ¹®¼­µµ Ãâ·ÂÇÒ ¼ö ÀÖ´Ù. ÇÑ ÁÙÀÌ 64K°¡ ³Ñ´Â ¹®¼­°¡ ±×¸® ÈçÇÒ±î ½Í°ÚÁö¸¸ XML ¹®¼­¿¡´Â ¾ÆÁÖ ÈçÇÏ´Ù. XMLÀº ÀÌÁø ¹®¼­¸¦ Çí»ç ´ýÇÁ·Î Ãâ·ÂÇϴµ¥ ÀÌ ´ýÇÁ°¡ 64K¸¦ ºó¹øÈ÷ ³Ñ¾î¼±´Ù.

¾ÆÁÖ ±ä ¹®ÀÚ¿­À» Ãâ·ÂÇÏÁö ¸øÇÏ´Â ¹®Á¦´Â ¼öÁ¤Çߴµ¥ ¾ÆÁ÷ ºÒ¸¸ÀÌ ÀÖ´Ù. ¼öÆòÀ¸·Î ³Ê¹« ±ä ÁÙÀÌ ÀÖÀ¸¸é Ãâ·Â ¼Óµµ°¡ ´«¿¡ ¶ç°Ô ´À·ÁÁø´Ù´Â Á¡ÀÌ´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÏ·Á¸é È­¸é ¿µ¿ªÀ» ¹þ¾î³­ ¼¼±×¸ÕÆ®´Â ¾Æ¿¹ Ãâ·ÂÀ» ÇÏÁö ¾Ê´Â ÃÖÀûÈ­ Äڵ带 ÀÛ¼ºÇØ¾ß ÇÑ´Ù. ±×·±µ¥ ÀÌ ÃÖÀûÈ­´Â ±¸¹® ºÐ¼®¿¡ ¹®Á¦°¡ ÀÖ¾î °£´ÜÇÏÁö°¡ ¾Ê´Ù. ¿ÞÂÊÀÇ °¡·ÁÁø ¹®ÀÚ¿­À» ´Ù Çؼ®ÇØ ºÁ¾ß È­¸é¿¡ º¸ÀÌ´Â ºÎºÐÀÇ ±¸¹® ºÐ¼®À» ÇÒ ¼ö ÀÖ°í ¿À¸¥ÂÊ ³¡±îÁö ºÐ¼®ÇØ ºÁ¾ß ´ÙÀ½ ÁÙ¿¡ Àû¿ëÇÒ ±¸¹®À» Á¤È®ÇÏ°Ô Çؼ®ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ²À ÇØ°áÇÏ·Á¸é °¡´ÉÇϱâ´Â ÇÏ°ÚÁö¸¸ ºóµµ¿¡ ºñÇØ º¹Àâµµ°¡ ³Ê¹« Áõ°¡ÇϹǷΠÀÌ ÃÖÀûÈ­´Â ÇÏÁö ¾Ê±â·Î ÇÑ´Ù.

¶ó.¼Ò½º Á¤¸®

´ÙÀ½Àº ÀÌ»ó µ¿ÀÛÀ» ÀÏÀ¸Å°´Â ¹ö±×¶ó°í ÇÒ ¼ö´Â ¾øÁö¸¸ ÁÁÁö ¾ÊÀº ¼Ò½ºÀÇ ±¸Á¶¸¦ Á¶±Ý °³¼±ÇØ º¸ÀÚ. ¾÷±×·¹À̵带 Çϱâ Àü¿¡ ¿øº»À» Á» ±ò²ûÇÏ°Ô Á¤¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

 

¿­°ÅÇü »ç¿ë

ToolBar.cppÀÇ SetStatusText ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù. Á¤¼ö·Î µÇ¾î ÀÖ´Â Àμö¸¦ ¿­°ÅÇüÀ¸·Î ¹Ù²Ù´Â °ÍÀÌ´Ù.

 

void SetStatusText(int mask,LPCTSTR Mes/*=NULL*/)

{

     ....

     if (mask & 2) {

        wsprintf(Text, "%dÁÙ %dÄ­",pSi->Ae.GetInfoFromOff(AE_INFO_PARA)+1,

           pSi->Ae.GetInfoFromOff(AE_INFO_PARACOL)+1);

          SendMessage(hStatus, SB_SETTEXT, 1, (LPARAM)Text);

     }

 

     if (mask & 4) {

          if (pSi->Ae.GetFormat() == AE_FORMAT_WIN) {

              byte=pSi->Ae.GetTextLength();

              if (byte < 10240) {

               wsprintf(Text, "ÃÑ %dÁÙ %d ¹ÙÀÌÆ®",

                   pSi->Ae.GetDocInfo(AE_DOC_TOTALPARA)+1,byte);

              } else {

               wsprintf(Text, "ÃÑ %dÁÙ %d K¹ÙÀÌÆ®",

                   pSi->Ae.GetDocInfo(AE_DOC_TOTALPARA)+1,byte/1024);

              }

          } else {

           wsprintf(Text, "ÃÑ %dÁÙ",pSi->Ae.GetDocInfo(AE_DOC_TOTALPARA)+1);

          }

          SendMessage(hStatus, SB_SETTEXT, 2, (LPARAM)Text);

     }

 

GetInfoFromOff ÇÔ¼öÀÇ Àμö´Â AE_INFO_* ¿­°ÅÇüÀÌ Á¤ÀǵǾî Àִµ¥µµ »ó¼ö 2¿Í 4¸¦ ¹Ù·Î »ç¿ëÇÏ¿´´Ù. ¹°·Ð ¾îÂ÷ÇÇ ¿­°ÅÇüÀº Á¤¼öÇüÀ̹ǷΠ±â´É»óÀÇ Â÷ÀÌ´Â ÀüÇô ¾øÁö¸¸ °¡±ÞÀûÀ̸é ÀÌ¿Õ ¸¸µé¾î ³õÀº ¿­°ÅÇüÀ» È°¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¿­°Å ¸â¹ö°¡ Ãß°¡µÇ°Å³ª »èÁ¦µÉ ¶§ °Ë»öÇϱ⵵ Æí¸®ÇÏ°í °¡µ¶¼ºµµ ÈξÀ ´õ ÁÁ´Ù. GetDocInfo ÇÔ¼öµµ ¸¶Âù°¡Áö·Î ¿­°ÅÇüÀ» Á¤ÀÇÇÏ°í ÀÖÀ¸¹Ç·Î Àû±ØÀûÀ¸·Î »ç¿ëÇß´Ù.

ºÒÇÊ¿äÇÑ º¯¼ö »èÁ¦

CApiEdit Ŭ·¡½ºÀÇ SelFore, SelBack ¸â¹ö º¯¼ö´Â ºÒÇÊ¿äÇϹǷΠ»èÁ¦ÇÏÀÚ. ¼±Åà ¿µ¿ªÀÇ »ö»óÀ» ±â¾ïÇÏ´Â cSelFore, cSelBackº¯¼ö¸¸À¸·Îµµ ÃæºÐÇÏ´Ù. ÀÌ º¯¼ö°¡ ÇÊ¿äÇÏ´Ù°í »ý°¢Çß´ø ÀÌÀ¯´Â HideSelTypeÀÌ 1(È帮°Ô Ç¥½Ã)ÀÏ ¶§ OnSetFocus, OnKillFocus¿¡¼­ Æ÷Ä¿½º ¿©ºÎ¿¡ µû¶ó ¼±Åà ¿µ¿ªÀÇ »ö»óÀ» ¹Ù²Ù±â À§Çؼ­¿´´Ù. Æ÷Ä¿½º¸¦ ¾ò°Å³ª ÀÒÀ» ¶§ ÀÌ °ªÀ» º¯°æÇÔÀ¸·Î½á DrawLine¿¡¼­ ±×¸®´Â ¼±Åà ¿µ¿ª »ö»óÀ» ¹Ù²Ù´Â ½ÄÀ̾ú´Ù.

±×·¯³ª ÀÌ °ªÀº ½ÇÇàÁß¿¡ Á÷Á¢ ¾òÀ» ¼ö ÀÖÀ¸¹Ç·Î º°µµÀÇ ¿¹ºñ µ¿ÀÛÀ» ÃëÇÒ ÇÊ¿ä¾øÀÌ DrawLine¿¡¼­ Á÷Á¢ Á¶°ÇÀ» °Ë»çÇÏ¿© ¼±Åà ¿µ¿ªÀÇ »ö»óÀ» ÀÓ½ÃÀûÀÎ Áö¿ª º¯¼ö·Î °áÁ¤ÇÏ´Â °ÍÀÌ ÈξÀ ´õ È¿À²ÀûÀÌ´Ù. ApiEdit.hÀÇ CApiEdit Ŭ·¡½º¿¡¼­ SelFore, SelBack ¸â¹ö ¼±¾ð¹®À» »èÁ¦ÇÏ°í ´ÙÀ½ ÇÔ¼öµéÀ» ¼öÁ¤ÇÑ´Ù.

 

void CApiEdit::OnSetFocus(HWND hWnd, HWND hwndOldFocus)

{

     SetCaret(FALSE,FALSE);

 

    SelFore=cSelFore;

    SelBack=cSelBack;

 

     if ((HideSelType != 2 && SelStart != SelEnd) ||

          (bHideCurLine == TRUE && nShowCurLine != 0)) {

          Invalidate(-1);

     }

}

 

void CApiEdit::OnKillFocus(HWND hWnd, HWND hwndNewFocus)

{

     DestroyCaret();

 

    if (HideSelType != 2) {

        SelFore=RGB(0,0,0);

        SelBack=RGB(192,192,192);

    }

     if ((HideSelType != 2 && SelStart != SelEnd) ||

          (bHideCurLine == TRUE && nShowCurLine != 0)) {

          Invalidate(-1);

     }

}

 

Æ÷Ä¿½º À̵¿¿¡ µû¶ó ¼±Åà ¿µ¿ª »ö»óÀÌ ¹Ù²î´Âµ¥ SelFore, SelBack¿¡ Àû¿ëÇÒ »ö»óÀ» ¹Ì¸® ´ëÀÔÇÒ ÇÊ¿ä¾øÀÌ ´Ù½Ã ±×¸®±â¸¸ Çß´Ù. ±×·¯¸é DrawLineÀÌ È£ÃâµÇ¸ç ¿©±â¼­ Á÷Á¢ ¼±Åÿµ¿ªÀÇ »ö»óÀ» °áÁ¤ÇÑ´Ù.

 

int CApiEdit::DrawLine(HDC hdc, int Line)

{

          ....

          if (bInSel && (GetFocus()==hWnd || HideSelType!=0 || bFindSelect)) {

              if (GetFocus()==hWnd || HideSelType==2 || bFindSelect) {

                   fore=cSelFore;

                   back=cSelBack;

              } else {

               fore=RGB(0,0,0);

               back=RGB(192,192,192);

              }

          } else {

 

Á¶°Ç¹®ÀÌ Á¶±Ý ±î´Ù·Î¿îµ¥ ÀÏ´Ü Ãâ·ÂÇÒ Á¶°¢ÀÌ ¼±Åÿµ¿ª¾ÈÀ̾î¾ß ÇϹǷΠbInSelÀÌ TRUE¿©¾ß ÇÑ´Ù. ±×¸®°í Æ÷Ä¿½º¸¦ °¡Áö°í Àְųª ±×·¸Áö ¾Ê´õ¶óµµ HideSelTypeÀÌ 0ÀÌ ¾Æ´Ï°Å³ª °Ë»ö¿¡ ÀÇÇØ ¼±ÅÃµÈ ºí·ÏÀ̾î¾ß ÇÏ¸ç ±× ¿ÜÀÇ °æ¿ì´Â º¸Åë »ö»óÀ¸·Î Ãâ·ÂµÈ´Ù. ¼±Åà ºí·ÏÀÎ °æ¿ì´Â ´Ù½Ã µÎ °¡Áö·Î ³ª´©´Âµ¥ Æ÷Ä¿½º¸¦ °¡Áö°í Àְųª Ç×»ó Ç¥½ÃÀ̰ųª °Ë»ö ºí·ÏÀÎ °æ¿ì´Â cSelFore, cSelBackÀ¸·Î ±×¸®°í ±× ³ª¸ÓÁö °æ¿ì, Áï Æ÷Ä¿½º°¡ ¾ø°í È帮°Ô Ç¥½ÃÀÌ°í °Ë»ö ºí·ÏÀÌ ¾Æ´Ï¸é È帮°Ô Ãâ·ÂÇÑ´Ù.

DrawLine¿¡¼­ ¸ðµç Á¶°ÇÀ» Á¡°ËÇÏ¿© ¼±Åà ¿µ¿ªÀÇ »ö»óÀ» ¾Ë¾Æ¼­ °áÁ¤ÇϹǷΠ¿ÜºÎ¿¡¼­´Â ´õ ÀÌ»ó ¼±Åà ¿µ¿ªÀÇ »ö»ó¿¡ ´ëÇؼ­´Â ½Å°æ¾²Áö ¾Ê¾Æµµ µÈ´Ù. ¼±Åà ¿µ¿ª »ö»ó¿¡ ´ëÇÑ ¿É¼Ç(HideSelType )ÀÌ º¯°æµÇ¾îµµ ÀÌ º¯¼öµéÀº ´õ ÀÌ»ó °ü¸®ÇÒ ÇÊ¿ä¾øÀÌ ¹«È¿È­¸¸ ÇÏ¸é µÈ´Ù.

 

void CApiEdit::SetHideSelType(int aHideSelType)

{

     HideSelType=aHideSelType;

    if (HideSelType == 1) {

        SelFore=RGB(0,0,0);

        SelBack=RGB(192,192,192);

    } else {

        SelFore=cSelFore;

        SelBack=cSelBack;

    }

     if (SelStart != SelEnd) {

          Invalidate(-1);

     }

}

 

¼±Åà »ö»ó ¿É¼ÇÀÌ º¯°æµÉ ¶§µµ ´Ù½Ã ±×¸®±â¸¸ ÇÑ´Ù. ³ª¸ÓÁö µÞ󸮴 DrawLineÀÌ º¯°æµÈ ¿É¼ÇÀ» ÂüÁ¶ÇÏ¿© ¾Ë¾Æ¼­ ±×¸°´Ù.

 

void CApiEdit::SetSelForeColor(COLORREF acol)

{

     if (acol==-1) {

          cSelFore=GetSysColor(COLOR_HIGHLIGHTTEXT);

     } else {

          cSelFore=acol;

     }

     if (SelStart!=SelEnd && (HideSelType==2 || GetFocus()==hWnd)) {

        SelFore=cSelFore;

          Invalidate(-1);

     }

}

 

void CApiEdit::SetSelBackColor(COLORREF acol)

{

     if (acol==-1) {

          cSelBack=GetSysColor(COLOR_HIGHLIGHT);

     } else {

          cSelBack=acol;

     }

     if (SelStart!=SelEnd && (HideSelType==2 || GetFocus()==hWnd)) {

        SelBack=cSelBack;

          Invalidate(-1);

     }

}

 

¿©±â±îÁö ¼öÁ¤ÇÑ ÈÄ ÄÄÆÄÀÏÇØ º¸¸é ¿ÏÀüÈ÷ µ¿ÀÏÇÏ°Ô µ¿ÀÛÇÒ °ÍÀÌ´Ù. ºÒÇÊ¿äÇÑ º¯¼ö µÑÀ» ¾ø¾ÝÀ» »ÓÀÌÁö¸¸ ÀÌ ÀÛÀº º¯È­µµ °áÄÚ ¹«½ÃÇÒ ¼ö ¾ø´Âµ¥ ¸â¹ö°¡ ÁÙ¾îµé¸é Ŭ·¡½º°¡ ´Ü¼øÇØÁö°í ÀÌ Äڵ带 Àд »ç¶÷µéÀÌ ½Å°æ½á¾ß ÇÒ »çÇ×ÀÌ ÁÙ¾îµç´Ù. ÀÌ ¼Ò½º¸¦ óÀ½ º¸´Â »ç¶÷¿¡°Ô´Â cSelFore¿Í SelForeÀÇ Â÷ÀÌÁ¡À» ÆľÇÇÏ´Â °Í¸¸ Çصµ ½±Áö ¾ÊÀº ÀÏÀÌ´Ù. ½Ç½Ã°£À¸·Î °è»ê °¡´ÉÇÑ °ªÀ̶ó¸é ±»ÀÌ º°µµÀÇ º¯¼ö¸¦ À¯ÁöÇÒ ÇÊ¿ä¾øÀÌ Á÷Á¢ ±¸ÇØ ¾²´Â °ÍÀÌ °£ÆíÇÏ°í ºÒÀÏÄ¡ÀÇ À§Çèµµ »ç¶óÁø´Ù. ³í¸®ÀûÀ¸·Î ÇÊ¿äÄ¡ ¾ÊÀº º¯¼ö¸¦ ³²°Ü µÎ´Â °Íµµ ¾î¶»°Ô º¸¸é ÀÏÁ¾ÀÇ ¹ö±×¶ó°í ÇÒ ¼ö ÀÖ´Ù.

ºÒÇÊ¿äÇÑ ÄÚµå »èÁ¦

Find.cppÀÇ OpenFileFromOutputÀÇ ´ÙÀ½ ÄÚµå´Â ÀüÇô ºÒÇÊ¿äÇÏ´Ù. GotoLine È£Ãâ·Î ¹Ù·Î À̵¿ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ¿ÀÇÁ¼ÂÀ» °è»êÇÒ ÇÊ¿ä°¡ ¾ø´Ù.

 

void OpenFileFromOutput(int idx)

{

     ....

     if (stricmp(Text,LastFIF) != 0) {

          MessageBox(g_hFrameWnd,"°Ë»ö ÈÄ¿¡ ÆÄÀÏÀÌ ¼öÁ¤µÇ¾ú½À´Ï´Ù. "

              "°Ë»öµÈ ÁÙÀÇ Ã¹ À§Ä¡·Î À̵¿ÇÕ´Ï´Ù.","¾Ë¸²",MB_OK);

        toff=pSi->Ae.GetOffFromPara(line,0);

          pSi->Ae.GotoLine(line,0,1);

     } else {

          pSi->Ae.GotoLine(line,col,1);

          pSi->Ae.SetSelect(toff,toff+lstrlen(LastFIF),TRUE);

     }

}

 

¾Æ¸¶ ÄÚµå ÀÛ¼ºÁß¿¡ ÀÌ·± Àú·± Å×½ºÆ®¸¦ ÇÏ´Ù°¡ ¹Ìó »èÁ¦ÇÏÁö ¸øÇÑ Â±âÀÎ °Í °°´Ù. Äڵ带 ÀÛ¼ºÇÑ °³¹ßÀÚ´Â ÀÌ Äڵ带 º¸°í ÀüÇô Àǹ̰¡ ¾ø´Â ¹®ÀåÀ̶ó´Â °ÍÀ» ½±°Ô ÆľÇÇÒ ¼ö ÀÖÁö¸¸ Á¦ 3 ÀÚÀÇ °æ¿ì´Â ¹º°¡ ½É¿ÀÇÑ ¶æÀÌ ÀÖ´Â ÄÚµå·Î »ý°¢ÇÏ¿© ÇÑÂüÀ» °í¹ÎÇÏ°Ô µÉ °ÍÀ̸ç ÀÌ Äڵ尡 ºÒÇÊ¿äÇÑ ÄÚµå¶ó´Â È®½ÅÀ» ³»¸®±â±îÁö´Â ±²ÀåÈ÷ ¸¹Àº ½Ã°£°ú Å×½ºÆ®¸¦ ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù. ±×·¡¼­ ºÒÇÊ¿äÇÑ ÄÚµå´Â ¹ß°ßµÇ´Â Áï½Ã ÀÛ¼ºÇÑ »ç¶÷ÀÌ Á÷Á¢ »èÁ¦ÇØ¾ß µÞÅ»ÀÌ ¾ø´Ù.

¸¶ÁøÀÇ ÇöÀçÇà Ç¥½Ã

¸¶Áø¿¡ ÇöÀç ÇàÀ» Ç¥½ÃÇÏ´Â ¿É¼ÇÀÌ Àִµ¥ ÀÌ ¿É¼ÇÀ» ¼±ÅÃÇϸé Ä¿¼­°¡ ÀÖ´Â ÁÙÀÇ ¸¶Áø¿¡ ÀÛÀº »ï°¢ÇüÀÌ Ç¥½ÃµÈ´Ù. »ï°¢ÇüÀº º»¹®°ú ±ÕÇüÀ» ÀÌ·ç±â À§ÇØ ±Û²Ã¿¡ ºñ·ÊÇÏ´Â Å©±â¸¦ °¡Áø´Ù. Åë»óÀÇ °æ¿ì´Â ÀÌ »ï°¢ÇüÀÌ º° ¹®Á¦°¡ ¾øÁö¸¸ ±ÛÀÚ Å©±â¸¦ ÃÖ´ë Å©±âÀÎ 72 Æ÷ÀÎÆ®·Î È®´ëÇÏ¸é »ï°¢ÇüÀÌ ¸¶ÁøÀ» ¹þ¾î³ª º»¹® ¿µ¿ªÀ» ħ¹üÇÑ´Ù.

»ï°¢ÇüÀÇ Å©±â°¡ FontHeight¸¦ ±âÁØÀ¸·Î °áÁ¤µÇ±â ¶§¹®¿¡ ±Û²ÃÀ» Å°¿ì¸é »ï°¢Çüµµ µ¢´Þ¾Æ Ä¿Áö´Â °ÍÀÌ´Ù. ±â´É»ó Å©°Ô ¹®Á¦°¡ µÇÁö ¾Ê°í ±Û²ÃÀ» ÀÌ·¸°Ô Å©°Ô ¸¸µå´Â °æ¿ìµµ ÈçÇÏÁö ¾ÊÁö¸¸ ±×·¡µµ º¸±â¿¡ ÁÁÁö´Â ¾Ê´Ù. DrawLine³¡¿¡ ÀÖ´Â ¸¶Áø Ãâ·Â Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤Çϸé ÇØ°áÇÒ ¼ö ÀÖ´Ù.

 

int CApiEdit::DrawLine(HDC hdc, int Line)

{

     ....

          if (nShowCurLine == 5 && bCurLine) {

              OldBrush=(HBRUSH)SelectObject(hdc,GetStockObject(BLACK_BRUSH));

              r=min(FontHeight,MarginWidth);

              tri[1].y=r-1-r % 2;

              tri[2].x=r/2;

              tri[2].y=r/2;

              len=FontHeight/2-tri[2].y;

              if (len!=0) {

                   for (c=0;c<4;c++) {

                        tri[c].y+=len;

                   }

              }

              Polygon(hdc,tri,4);

              SelectObject(hdc,OldBrush);

          }

     }

     return 1;

}

 

¿©ÀüÈ÷ ÆùÆ® Å©±â¸¦ ±âÁØÀ¸·Î ÇÏ¿© »ï°¢ÇüÀÇ ÇѺ¯ ±æÀ̸¦ °è»êÇ쵂 ¸¶Áø ÆøÀÇ Àý¹Ýº¸´Ù´Â ´õ Ä¿Áú ¼ö ¾ø´Ù. »ï°¢ÇüÀÇ Å©±â¸¦ ÀÌ·¸°Ô °­Á¦·Î Á¶Á¤ÇÒ °æ¿ì ²ÀÁöÁ¡ÀÌ ÁÙÀÇ Áß¾Ó¿¡ Á¤·ÄµÇÁö ¾ÊÀ¸¹Ç·Î ÇàÀÇ Áß¾ÓÀ¸·Î ÆòÇàÀ̵¿½ÃÄ×´Ù. ÀÌ °è»êÀ» Çϱâ À§ÇØ ¸î °³ÀÇ Áß°£ º¯¼öµéÀÌ ÇÊ¿äÇÏÁö¸¸ º°µµÀÇ º¯¼ö¸¦ ¼±¾ðÇÏÁö ¾Ê°í ÀÌ¹Ì ¼±¾ðµÇ¾î ÀÖ´Â r,c,len Áö¿ª º¯¼ö¸¦ ÀçÈ°¿ëÇß´Ù. ¾Æ¹«¸® Áö¿ª º¯¼ö¶óµµ µÎ °¡Áö Àǹ̸¦ ÇÒ´çÇÏ´Â °ÍÀº ÁÁÁö ¾ÊÁö¸¸ ±ÞÇÒ ¶§´Â ÀÌ·¸°Ô Çϱ⵵ ÇÑ´Ù.

ÀÌÁ¦ ±Û²ÃÀ» Á¦ ¾Æ¹«¸® Å©°Ô Å°¿öµµ ¸¶ÁøÀÇ »ï°¢ÇüÀÌ º»¹® ¿µ¿ªÀ¸·Î ħ¹üÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÀÌ·± ¹ö±×´Â °³¹ßÀÚ°¡ Á÷Á¢ ¹ß°ßÇϱ⠱²ÀåÈ÷ ¾î·Á¿îµ¥ ¸¶ÁøÀÌ ÀÖ¾î¾ß ÇÏ°í ÇöÀçÇàÀ» ¸¶Áø¿¡ Ãâ·ÂÇÏ´Â ¿É¼ÇÀ¸·Î ¼±ÅÃÇÏ°í ±Û²ÃÀ» ÃÖ´ë Å©±â·Î Å°¿ö ºÁ¾ß¸¸ ¹ß°ßÇÒ ¼ö ÀÖ´Ù. ¿É¼ÇµéÀÇ ¸ðµç Á¶ÇÕÀ» ´Ù Å×½ºÆ®ÇÒ ¼ö´Â ¾øÀ¸¹Ç·Î ¸¾ ¸Ô°í Å×½ºÆ®ÇÏÁö ¾Ê´Â ÇÑÀº ÀÌ ¹ö±×¸¦ ¹ß°ßÇϱ⠾î·Æ´Ù. ±×·¡¼­ Àü¹® Å×½ºÆ® ¾÷ü¿¡°Ô ºñ¿ëÀ» ÁöºÒÇÏ°í Å×½ºÆ®¸¦ ¸Ã±â´Â °ÍÀÌ´Ù.

¹ÂÅؽº ÇÚµé ÇØÁ¦

´ç±ÙÀº ÀÌ¹Ì ½ÇÇàÁßÀÎ ÀνºÅϽº°¡ ÀÖÀ» ¶§ Áߺ¹ ½ÇÇàµÇÁö ¾Ê°í ½ÇÇàÁßÀÎ ÀνºÅϽº¸¦ È°¼ºÈ­½ÃÅ°´Â ¿É¼ÇÀ» °¡Áö°í ÀÖ´Ù. ÀÌ¹Ì ½ÇÇàÁßÀÎ ´ç±ÙÀÌ ÀÖ´ÂÁö Á¶»çÇϱâ À§ÇØ À̸§ÀÖ´Â ¹ÂÅؽº¸¦ »ç¿ëÇϴµ¥ ÀÌ¹Ì ½ÇÇàÁßÀÏ ¶§ ¹ÂÅؽº¸¦ ´ÝÁö ¾Ê°í Á¾·áÇÏ´Â ¹ö±×°¡ ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏ°í ¹ÂÅؽºÀÇ À̸§µµ º¯°æÇÑ´Ù.

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

            ,LPSTR lpszCmdParam,int nCmdShow)

{

     ....

     Option.bAllowMulti=SHRegReadInt(SHCU,KEY"Setting","bAllowMulti",0);

     if (Option.bAllowMulti==FALSE) {

#ifdef _DEBUG

        hMutex=CreateMutex(NULL,FALSE,"Dangeun120_Mutex_For_Debug");

#else

        hMutex=CreateMutex(NULL,FALSE,"Dangeun120_Mutex_For_Allow_Unique_Instance");

#endif

          if (GetLastError() == ERROR_ALREADY_EXISTS) {

           CloseHandle(hMutex);

              ActivateBrood();

              return 0;

          }

     }

 

È°¼ºÈ­µÈ ÇÁ·ÎÁ§Æ®°¡ ÀÖÀ» ¶§ ¹ÂÅؽº¸¦ ´Ý°í Á¾·áÇß´Ù. ±×³É µÎ´õ¶óµµ Æ÷±âµÈ ¹ÂÅؽº·Î ±â·ÏµÇ¹Ç·Î º° ÀÌ»óÀº ¾øÁö¸¸ ¿øÄ¢´ë·Î ´Ý´Â °ÍÀÌ ÁÁ´Ù. ¹ÂÅؽºÀÇ À̸§À» º¯°æÇÏÁö ¾ÊÀ¸¸é 1.0°ú 1.2¸¦ µ¿½Ã¿¡ ½ÇÇàÇÒ ¼ö ¾øÀ¸¹Ç·Î ¹«Ã´ ºÒÆíÇÒ °ÍÀÌ´Ù. ÀÌ µÑÀº °°Àº ÇÁ·Î±×·¥À̶ó°íµµ ÇÒ ¼ö ÀÖÁö¸¸ ¹öÀüÀÌ ´Ù¸£¹Ç·Î µû·Î ½ÇÇàµÇ´Â °ÍÀÌ ³í¸®»ó ¿Ç´Ù.

Ž»ö±â Æ˾÷ ±³Ã¼

´ç±ÙÀº Ž»ö±âÀÇ Æ˾÷ ¸Þ´º¿¡ ÀÚ½ÅÀ» È£ÃâÇÏ´Â Ç׸ñÀ» µî·ÏÇÏ°í ÅؽºÆ® ÆÄÀÏÀÇ Æ˾÷ ¸Þ´º¿¡¼­ ¹Ù·Î ´ç±ÙÀ» È£ÃâÇÏ´Â ±â´ÉÀ» Á¦°øÇÑ´Ù. ÅؽºÆ® ÆíÁý±â´Â ¾îÂ÷ÇÇ Çí»ç ÆíÁý±â¸¦ °âÇÏ´Â °æ¿ì°¡ ¸¹À¸¹Ç·Î ¸ðµç ÆÄÀÏ¿¡ ´ëÇØ ´ç±Ù ÅؽºÆ® ÆíÁý±â¸¦ È£ÃâÇÒ ¼ö ÀÖµµ·Ï *, Áï ¸ðµç È®ÀåÀÚ¿¡ ´ëÇØ ¿¬°áÇØ µÎ¾ú´Ù.

ÀÌ ¹æ½ÄÀº Àß µ¿ÀÛÇϱâ´Â ÇÏÁö¸¸ Æ˾÷ ¸Þ´º·Î È£ÃâÇÒ ¶§ »Ó¸¸ ¾Æ´Ï¶ó ¿¬°áµÇÁö ¾ÊÀº ÆÄÀÏÀ» ´õºíŬ¸¯ÇÒ ¶§µµ ´ç±ÙÀ¸·Î ¿­·Á°í ÇÑ´Ù´Â Á¡¿¡¼­ ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. 1±Ç¿¡¼­µµ ¹Ì¸® ¿¹°íÇßµíÀÌ Á¦´ë·Î ¸¸µå·Á¸é Ž»ö±â¿Í Åë½ÅÇÒ ¼ö ÀÖ´Â COM ¿ÀºêÁ§Æ®¸¦ ÀÛ¼ºÇØ¾ß ÇÑ´Ù. À̹ø ¹öÀü¿¡¼­´Â COM ¿ÀºêÁ§Æ®¸¦ ¸¸µé °èȹÀ̹ǷΠ½Ã½ºÅÛÀÇ ·¹Áö½ºÆ®¸®¸¦ °Çµå¸®´Â Äڵ带 ÀÏ´Ü »èÁ¦ÇÏÀÚ.

 

void RegisterPopup(BOOL bReg)

{

     //

}

 

ÀÌ ÇÔ¼ö ³»ºÎ¿¡ COM °³Ã¼ µî·Ï ¹× ÇØÁ¦ Äڵ尡 ÀÛ¼ºµÉ °ÍÀÌ´Ù. ÀÌ Äڵ带 Áö±Ý »èÁ¦ÇÏÁö ¾ÊÀ¸¸é ´ÙÀ½¿¡ 1.0 ¹öÀüÀ» ½ÇÇàÇؼ­ ¼³Ä¡ ÇØÁ¦¸¦ Çؾ߸¸ ·¹Áö½ºÆ®¸® Ç׸ñÀ» Áö¿ï ¼ö ÀÖÀ¸¹Ç·Î ºÒÆíÇÏ´Ù. »õ·Î¿î ¿¬°á ¹æ½ÄÀ» ¾²±â·Î °áÁ¤ÇßÀ¸¹Ç·Î ÀÌÀü ÄÚµå´Â ¾Æ¿¹ »èÁ¦ÇØ ¹ö¸®´Â °ÍÀÌ ÁÁ´Ù.

MRU ¹öÆÛ °ü¸®

´ç±ÙÀº ÃÖ±Ù ¿¬ ÆÄÀÏ ¸ñ·Ï °ü¸®¸¦ À§ÇØ CHistory Ŭ·¡½º¸¦ »ç¿ëÇϴµ¥ ÀÌ Å¬·¡½ºÀÇ ÀçÇÒ´ç Äڵ忡 ¹ö±×°¡ ÀÖ´Ù. °ü¸® ´ë»ó ¹®ÀÚ¿­ÀÇ ÆøÀº width ¸â¹ö, °³¼ö´Â height ¸â¹ö·Î ±â¾ïÇÏ¸ç ½ÇÁ¦ µ¥ÀÌÅ͸¦ ÀúÀåÇÏ´Â ¹öÆÛ´Â data ¸â¹ö¿¡ ÇÒ´çÇÑ´Ù. Init ÇÔ¼ö¿¡¼­´Â Á¤È®ÇÑ Å©±â´ë·Î ÇÒ´çÇϴµ¥ ChangeHeight¿¡¼­ ÀçÇÒ´çÇÒ ¶§ data ¸â¹ö¸¦ ÀçÇÒ´çÇÏÁö ¾Ê´Â ¹®Á¦°¡ ÀÖ´Ù. ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

void CHistory::ChangeHeight(int aheight)

{

     int i;

 

     if (aheight > height) {

        data=(TCHAR **)realloc(data,sizeof(TCHAR *)*aheight);

          for (i=height;i<aheight;i++) {

              data[i]=(TCHAR *)malloc(width);

              memset(data[i],0,width);

          }

     }

 

³ôÀÌ°¡ ´Ã¾î³¯ ¶§ dataµµ »õ ³ôÀÌÀÎ aheight¿¡ ¸Â°Ô ÀçÇÒ´çÇß´Ù. ÀÌ Äڵ尡 ´©¶ôµÊÀ¸·Î½á ½ÇÇàÁß¿¡ MRUÀÇ °³¼ö¸¦ ´õ Å©°Ô ´Ã¸®¸é ¸Þ¸ð¸®°¡ ±úÁö´Â ¹®Á¦°¡ ÀÖ¾ú´Ù. ÃÖÃÊ ¼³Ä¡ ÈÄ 10°³ÀÇ ÆÄÀÏÀ» ¿­°í MRU¸¦ 30°³·Î ´Ã¸®¸é ù ¹ø° ÆÄÀÏ ¸ñ·ÏÀÌ Æı«µÉ »Ó¸¸ ¾Æ´Ï¶ó ¸Þ¸ð¸®¸¦ À߸ø °Çµå¸²À¸·Î½á ¾ðÁ¦ ´Ù¿îµÉÁö ¸ð¸£´Â »óÅ°¡ µÇ¾î ¹ö¸°´Ù. ½±°Ô ¹ß°ßÇÒ ¼ö ÀÖ´Â ¹ö±×ÀÌÁö¸¸ MRU °³¼ö¸¦ º¯°æÇÏ´Â °æ¿ì°¡ ¸¹Áö ¾Ê¾Æ ´Ê°Ô ¹ß°ßµÇ¾ú´Ù.

¹öÆÛ¸¦ ÀçÇÒ´çÇÒ ¶§ data ¸â¹ö¸¸ Á¤È®ÇÏ°Ô °ü¸®Çϸé ÀÌ·± ¹®Á¦°¡ ÇØ°áµÈ´Ù. »õ·Î¿î ³ôÀÌÀÎ aheight¸¸Å­ data¸¦ ÀçÇÒ´çÇß´Ù. ´Ü, Å©±â°¡ ÁÙ¾îµé ¶§´Â ÀϺη¯ Ãà¼Ò ÀçÇÒ´çÇÏÁö ¾Ê¾Ò´Âµ¥ ¸ðÀÚ¶ó´Â °ÍÀº ¹®Á¦°¡ µÇÁö¸¸ ³²´Â °ÍÀº Å« ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. data ¹è¿­ µÚÂÊÀÇ ³²´Â °ø°£Àº Æı«ÀÚ¿¡¼­ ÀÏ°ýÁ¤¸®µÈ´Ù. µðÆúÆ® »ý¼ºÀÚµµ ³Ê¹« ¹«Ã¥ÀÓÇÏ°Ô ÀÛ¼ºµÇ¾î Àִµ¥ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

CHistory::CHistory()

{

     width=height=num=0;

     data=NULL;

}

 

CHistory Ŭ·¡½º´Â ÀÏ´Ü ¸ÕÀú »ý¼ºÇÑ ÈÄ Init·Î ÇÊ¿äÇÑ Å©±â¸¸Å­ ÃʱâÈ­Çϱâ À§ÇØ µðÆúÆ® »ý¼ºÀÚ¸¦ Á¦°øÇϴµ¥ ÀÌ »ý¼ºÀÚ°¡ ¾Æ¹« °Íµµ ÇÏÁö ¾Ê±â ¶§¹®¿¡ ¸â¹öµéÀÌ ¾²·¹±â°ªÀ¸·Î ÃʱâÈ­µÇ¸ç ÀÌ ¾²·¹±âµéÀº Æı«µÉ ¶§ ¸Þ¸ð¸® ¿¡·¯¸¦ À¯¹ßÇÑ´Ù. ´ç±ÙÀº CHistory °´Ã¼¸¦ »ç¿ëÇÏ´Â ¸ðµç °÷¿¡¼­ Init¸¦ Á¦´ë·Î È£ÃâÇϹǷΠº° ¹®Á¦°¡ ¾øÁö¸¸ Init¸¦ È£ÃâÇÏÁö ¾ÊÀ¸¸é ´Ù¿îµÈ´Ù.

Áï, ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÒ ¶§´Â ¹Ýµå½Ã µðÆúÆ®°¡ ¾Æ´Ñ »ý¼ºÀÚ¸¦ »ç¿ëÇϰųª ¾Æ´Ï¸é °´Ã¼ »ý¼ºÈÄ Init ÇÔ¼ö¸¦ ¹Ýµå½Ã È£ÃâÇØ¾ß ÇÏ´Â ÁÖÀÇ »çÇ×ÀÌ Á¸ÀçÇÏ´Â °ÍÀÌ´Ù. ÁÖÀÇ »çÇ×´ë·Î¸¸ »ç¿ëÇÑ´Ù¸é ¹®Á¦°¡ ¾øÀ¸³ª Ŭ·¡½ºÀÇ »ç¿ëÀÚµéÀº ÀÌ·± »çÇ×À» Àß ¾ËÁö ¸øÇϹǷΠ¹®Á¦°¡ µÈ´Ù. ÀÌ Å¬·¡½º¸¦ ´Ù¸¥ °÷¿¡¼­ ÀçÈ°¿ëÇÒ ¶§¸¦ ´ëºñÇÏ¿© Init¸¦ È£ÃâÇÏÁö ¾ÊÀ» ¶§µµ ÃÖ¼ÒÇÑ Á×Áö´Â ¾Ê°Ô ¿¡·¯Ã³¸®ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù.

ºÒÇÊ¿äÇÑ Á¶°Ç¹® Á¤¸®

Config.cppÀÇ GeneralDlgProc¿¡ ÀÖ´Â ´ÙÀ½ Äڵ带 º¸ÀÚ.

 

CheckDlgButton(hDlg,IDC_EXPLORERPOPUP,

     NewOption.bExplorerPopup ? BST_CHECKED:BST_UNCHECKED);

 

bExplorerPopup ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖÀ¸¸é IDC_EXPLORERPOPUP üũ ¹Ú½º¸¦ üũÇÏ°í ±×·¸Áö ¾Ê´Ù¸é üũ¸¦ ÇØÁ¦ÇÏ´Â ÄÚµåÀÌ´Ù. ¾ÆÁÖ ½¬¿î ÄÚµåÀÌÁö¸¸ ÀÌ ÄÚµå´Â ´ÙÀ½°ú °°ÀÌ ÈξÀ ´õ ª°Ô ¾µ ¼ö ÀÖ´Ù.

 

CheckDlgButton(hDlg,IDC_EXPLORERPOPUP,NewOption.bExplorerPopup);

 

BST_CHECKED ¸ÅÅ©·ÎÀÇ ½ÇÁ¦°ªÀÌ 1ÀÌ°í BST_UNCHECKEDÀÇ ½ÇÁ¦°ªÀÌ 2·Î Á¤ÀǵǾî ÀÖÀ¸¹Ç·Î BOOL ŸÀÔÀÇ bExplorerPopup º¯¼ö°ªÀÎ TRUE, FALSE¸¦ °ð¹Ù·Î »ç¿ëÇصµ ¾Æ¹« ¹®Á¦°¡ ¾ø´Â °ÍÀÌ´Ù. µÎ ÁÙ·Î µÈ Äڵ尡 ÇÑ ÁÙ·Î ÁÙ¾îµé¹Ç·Î ¼Ò½ºµµ ª¾ÆÁø´Ù. ´ÙÀ½ Äڵ嵵 ¸¶Âù°¡ÁöÀÌ´Ù.

 

NewOption.bExplorerPopup=IsDlgButtonChecked(hDlg,

     IDC_EXPLORERPOPUP) == BST_CHECKED ? 1:0;

 

IsDlgButtonChecked°¡ ¸®ÅÏÇÑ °ªÀÌ BST_CHECKEDÀ̸é bExplorerPopup ¿É¼Ç¿¡ 1(TRUE)¸¦ ´ëÀÔÇÏ°í ±×·¸Áö ¾ÊÀ¸¸é 0(FALSE)¸¦ ´ëÀÔÇÑ´Ù´Â ¶æÀε¥ ´ÙÀ½°ú °°ÀÌ ¾µ ¼ö ÀÖ´Ù.

 

NewOption.bExplorerPopup=IsDlgButtonChecked(hDlg, IDC_EXPLORERPOPUP);

 

" ? BST_CHECKED:BST_UNCHECKED"´Â ÀüÇô ºÒÇÊ¿äÇÑ ÄÚµåÀ̹ǷΠ¸ðµÎ ã¾Æ¼­ »èÁ¦ÇÑ´Ù. ¶ÇÇÑ "== BST_CHECKED ? 1:0"µµ »ç½Ç»ó ºÒÇÊ¿äÇÑ ¹®ÀåÀ̹ǷΠ»èÁ¦ÇÏ´Â °ÍÀÌ ÁÁ´Ù. BST_CHECKED¶ó´Â ¸íĪÀ» ÆÄÀÏ °Ë»öÇØ º¸¸é ¼ö½Ê°³°¡ ³ª¿À´Âµ¥ ÀÌ Áß Config.cpp¿¡ 40±ºµ¥, Dangeun.cpp¿¡ ¼¼ ±ºµ¥ÀÇ ºÒÇÊ¿äÇÑ °÷ÀÌ ÀÖÀ¸¹Ç·Î »èÁ¦ÇÑ´Ù.

¹°·Ð ¹öÆ°ÀÇ Ã¼Å©°ªÀº UINT ŸÀÔÀÌ°í ¿É¼Ç º¯¼ö´Â BOOL ŸÀÔÀ̹ǷΠÇü½Ä»ó µÎ ŸÀÔÀº ´Þ¶ó ÄÄÆÄÀÏ·¯¿¡ µû¶ó¼­´Â ¹®Á¦°¡ µÉ ¼öµµ ÀÖ´Ù. ÇÏÁö¸¸ ³í¸®ÀûÀ¸·Î ¹®Á¦°¡ ¾ø°í ºñÁÖ¾ó C++Àº À̸¦ º°µµÀÇ °æ°í·Î ó¸®ÇÏÁö ¾Ê´Â´Ù. ¶È°°Àº ÄÚµå¶ó¸é °¡±ÞÀûÀ̸é ª°Ô ¾²´Â °ÍÀÌ ÁÁ°í ±× ÆíÀÌ ¿ë·®¸é¿¡¼­³ª ¼Óµµ¸é¿¡¼­µµ À¯¸®ÇÏ´Ù. ¶ÇÇÑ ÀÌ ÇÁ·ÎÁ§Æ®°¡ ¼³¸íÀ» À§ÇÑ ½Ç½À ÇÁ·ÎÁ§Æ®ÀÌ´Ù º¸´Ï Áö¸éÀ¸·Î³ª À¥ ÆäÀÌÁö·Î³ª ³Ê¹« ±æÀ̼­´Â ¾ÈµÇ¸ç °¡µ¶¼º¿¡µµ ºÎÁ¤ÀûÀ̹ǷΠ¼öÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù.

ÄÚµù ½ºÅ¸ÀÏ ÅëÀÏ

ÀÌ Ã¥ÀÇ ÄÚµåµéÀº { ºê·¹À̽º°¡ ºí·ÏÀÌ ½ÃÀ۵Ǵ ÁÙ ³¡¿¡ ÀÖ´Â K&R ½ºÅ¸ÀÏ·Î ÀÛ¼ºµÇ¾î ÀÖ´Ù. K&R ½ºÅ¸ÀÏÀº ¿©´Â ºê·¹À̽º¸¦ º°µµÀÇ ÁÙ·Î ³»¸®´Â BSD ½ºÅ¸ÀÏ¿¡ ºñÇØ ÄÚµå ÁÙ ¼ö°¡ ª°í ÇÑ ´«¿¡ ¸¹Àº Äڵ带 º¼ ¼ö ÀÖ´Ù´Â Á¡ÀÌ ÀåÁ¡ÀÌ´Ù. ¹°·Ð ÄÚµù ½ºÅ¸ÀÏÀº °³ÀÎÀûÀÎ ÃëÇâÀ̱⠶§¹®¿¡ ¾î¶² °ÍÀÌ ¹Ýµå½Ã ÁÁ´Ù°í ÇÒ ¼ö´Â ¾ø´Ù. ÇÏÁö¸¸ Àû¾îµµ ÇÑ »ç¶÷ÀÌ ÀÛ¼ºÇÑ ¼Ò½º´Â ÅëÀϵǴ °ÍÀÌ ÁÁÀ¸¹Ç·Î ´ç±ÙÀº K&R ½ºÅ¸ÀÏ·Î ÅëÀÏÇϱâ·Î ÇÑ´Ù. ApiEdit.cppÀÇ OnKey ÇÔ¼ö Áß°£À» º¸¸é ´ÙÀ½ Äڵ尡 ÀÖ´Ù.

 

switch (vk)

{

     ....

 

´ëºÎºÐÀÇ { °ýÈ£´Â ºí·Ï ½ÃÀÛ ÁÙÀÇ ³¡¿¡ Àִµ¥ ¸î ±ºµ¥ ÀÌ ½ºÅ¸ÀÏ°ú ´Ù¸£°Ô ÀÛ¼ºµÈ °÷ÀÌ ÀÖ´Ù. if³ª for¹®Àº ¸ðµÎ K&R ½ºÅ¸ÀÏ·Î µÇ¾î Àִµ¥ À¯µ¶ switch ¹®¸¸ ½ºÅ¸ÀÏÀÌ ÅëÀϵǾî ÀÖÁö ¾Ê´Ù. ¾Æ¸¶ switch¹®ÀÌ Á» ±æ¾î¼­ ±×·¸°Ô ÇÑ °Í °°Àºµ¥ ÀÏ°ü¼ºÀ» À§ÇØ ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.

 

switch (vk) {

     ....

 

switch ·Î ÆÄÀÏ °Ë»öÇؼ­ { °¡ ÁÙ ³¡¿¡ ¾ø´Â °÷À» ¸ðµÎ ã¾Æ ¾Æ·¡ÁÙÀÇ {¸¦ À§·Î ¿Ã¸®¸é µÈ´Ù. ÇöÀç ¼Ò½º¿¡ 33±ºµ¥°¡ ÀÌ·¸°Ô µÇ¾î ÀÖ´Ù. ÀÌÈÄÀÇ ¼Ò½ºµéÀº ¸ðµÎ ÀÌ ½ºÅ¸ÀÏ´ë·Î ÀÛ¼ºÇÒ °ÍÀÌ´Ù. Âü°í·Î ¿ø°í¿¡ K&R ½ºÅ¸ÀÏÀ» °íÁýÇÏ´Â ÀÌÀ¯´Â Á¼Àº Áö¸é¿¡ ¸¹Àº ¼Ò½º¸¦ ½ÇÀ» ¼ö Àֱ⠶§¹®Àε¥ ¸¸¾à ÀÌ ½ºÅ¸ÀÏÀ» ÁÁ¾ÆÇÏÁö ¾Ê´Â´Ù¸é ½Ç½ÀÀº ÆíÇÑ´ë·Î Çصµ »ó°ü¾ø´Ù.

¸¶.À¯Æ¿¸®Æ¼ ÇÔ¼ö

Util.cpp ¸ðµâ¿¡´Â ÀÚÁÖ »ç¿ëÇÏ´Â ¹ü¿ëÀûÀÎ ÇÔ¼öµéÀÌ ÀÛ¼ºµÇ¾î Àִµ¥ ÀÌ ÇÔ¼öµéÀ» Á» Á¤ºñÇØ º¸ÀÚ. ÁÁÀº À¯Æ¿¸®Æ¼ ÇÔ¼öµéÀ» ¸¹ÀÌ È®º¸ÇÏ°í ÀÖÀ¸¸é ¹Ýº¹µÇ´Â ÀÛ¾÷À» Æí¸®ÇÏ°Ô Ã³¸®ÇÒ ¼ö ÀÖ´Ù. À¯Æ¿¸®Æ¼ ÇÔ¼ö´Â ¾²±â °£ÆíÇØ¾ß ÇÏ¸ç ¾î¶² ȯ°æ¿¡¼­³ª Àß ½ÇÇàµÇ´Â ¹ü¿ë¼ºÀ» °¡Áö°í ÀÖ¾î¾ß Çϴµ¥ 1.0ÀÇ À¯Æ¿¸®Æ¼ ÇÔ¼ö Áß¿¡´Â ±×·¸Áö ¸øÇÑ °ÍµéÀÌ ¸î °¡Áö ÀÖ´Ù.

 

µð¹ö±ë ·Î±× ÇÔ¼ö

Util.cpp¿¡´Â WriteLogFileÀ̶ó´Â µð¹ö±ë¿ë ÇÔ¼ö°¡ ÀÛ¼ºµÇ¾î Àִµ¥ ÆÄÀÏ¿¡ ·Î±×¸¦ ±â·ÏÇÏ¿© ÇÁ·Î±×·¥ÀÇ µ¿ÀÛÀ» °üÂûÇÒ ¼ö ÀÖ´Â ¾ÆÁÖ Æí¸®ÇÑ ÇÔ¼öÀÌ´Ù. ¸ÖƼ ½º·¹µå ȯ°æÀ̳ª ½Ç½Ã°£ µ¿ÀÛÀÌ ÇÊ¿äÇÒ ¶§´Â µð¹ö°ÅÀÇ µµ¿òÀ» ¹ÞÀ» ¼ö ¾øÀ¸¹Ç·Î ÀÌ·± ·ùÀÇ ÅؽºÆ® µð¹ö±ë ÇÔ¼ö°¡ Å« µµ¿òÀÌ µÈ´Ù. ±×·¯³ª ÀÌ ÇÔ¼ö´Â ¹Ýµå½Ã ÆÄÀÏÀ» ¿­¾î¾ß ±â·ÏÀ» »ìÆ캼 ¼ö ÀÖ´Ù´Â ¸é¿¡¼­ ºÒÆíÇѵ¥ µð¹ö°ÅÀÇ Ãâ·Ââ¿¡ ¹Ù·Î ¹®ÀÚ¿­À» Ãâ·ÂÇÏ´Â ÇÔ¼öµµ Ãß°¡ÇØ ³õÀÚ.

 

#ifdef _DEBUG

#define DEBUGLOGFILE "c:\\DgDebug.txt"

void WriteLogFile(TCHAR *strLog,...)

{

     ....

}

 

void CustomTrace(char *format, ...)

{

     TCHAR buf[1024];

     va_list marker;

 

     va_start(marker, format);

     vsprintf(buf,format,marker);

     OutputDebugString(buf);

}

#endif

 

»ç¿ëÇÏ´Â ¹æ¹ýÀº WriteLogFile°ú µ¿ÀÏÇѵ¥ ¹ö±×¸¦ ÀâÀ» ¶§ ¾ÆÁÖ À¯¿ëÇÏ°Ô È°¿ëµÈ´Ù. µÎ ÇÔ¼ö ¸ðµÎ µð¹ö±×Áß¿¡¸¸ »ç¿ëµÇ¹Ç·Î ¸±¸®Áî ¹öÀü¿¡´Â Æ÷ÇÔÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ±×·¡¼­ µð¹ö±× ¹öÀü¿¡¼­¸¸ ÄÄÆÄÀϵǵµ·Ï Á¶°ÇºÎ ó¸®Çß´Ù. ¿øÇü ¼±¾ðÀº ¿ë·®À» Â÷ÁöÇÏÁö ¾ÊÀ¸¹Ç·Î Çì´õ ÆÄÀÏ¿¡´Â Á¶°ÇºÎ ÄÄÆÄÀÏ Áö½ÃÀÚ¸¦ ¾²Áö ¾Ê¾Æµµ »ó°ü¾ø´Ù.

À§Ä¡ º¸°ü ¹× º¹±¸ ÇÔ¼ö

LoadPosition, SavePosition ÇÔ¼ö¸¦ ¼öÁ¤ÇÑ´Ù. ºÒÇÊ¿äÇÑ Äڵ嵵 ÀÖ°í Á» ´õ ¹ü¿ëÀûÀ¸·Î ¾µ ¼ö ÀÖµµ·Ï ¼öÁ¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÏÀÚ.

 

void SavePosition(HWND hWnd, TCHAR *Key)

{

     WINDOWPLACEMENT wndpl;

 

     wndpl.length=sizeof(WINDOWPLACEMENT);

     GetWindowPlacement(hWnd,&wndpl);

 

     SHRegWriteInt(SHCU,Key,"showCmd", wndpl.showCmd);

     SHRegWriteInt(SHCU,Key,"left", wndpl.rcNormalPosition.left);

     SHRegWriteInt(SHCU,Key,"top", wndpl.rcNormalPosition.top);

     SHRegWriteInt(SHCU,Key,"right", wndpl.rcNormalPosition.right);

     SHRegWriteInt(SHCU,Key,"bottom",wndpl.rcNormalPosition.bottom);

}

 

void LoadPosition(HWND hWnd, TCHAR *Key, RECT *Def/*=NULL*/)

{

     WINDOWPLACEMENT wndpl;

     RECT drt;

 

     if (Def==NULL) {

          SetRect(&drt,10,10,600,400);

     } else {

          CopyRect(&drt,Def);

     }

     wndpl.length=sizeof(WINDOWPLACEMENT);

     wndpl.flags=0;

     wndpl.rcNormalPosition.left=SHRegReadInt(SHCU,Key,"left",drt.left);

     wndpl.rcNormalPosition.top=SHRegReadInt(SHCU,Key,"top",drt.top);

     wndpl.rcNormalPosition.right=SHRegReadInt(SHCU,Key,"right",drt.right);

     wndpl.rcNormalPosition.bottom=SHRegReadInt(SHCU,Key,"bottom",drt.bottom);

     wndpl.showCmd=SHRegReadInt(SHCU,Key,"showCmd",drt.bottom);

 

     if (wndpl.showCmd == SW_SHOWMINIMIZED) {

          wndpl.showCmd=SW_RESTORE;

     }

 

     wndpl.ptMinPosition.x=wndpl.ptMinPosition.y=0;

     wndpl.ptMaxPosition.x=wndpl.ptMaxPosition.y=0;

     SetWindowPlacement(hWnd,&wndpl);

}

 

ÃÖ´ëÈ­µÇ¾î ÀÖ´ÂÁö¸¦ Á¶»çÇؼ­ ·¹Áö½ºÆ®¸®¿¡ ±â·ÏÇß¾ú´Âµ¥ ÀÌ¿ÕÀ̸é ÃÖ¼ÒÈ­ »óűîÁö ÀúÀåÇÒ ¼ö ÀÖµµ·Ï showCmd¸¦ ÀúÀåÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù. ±×·¯³ª º¸±â »óÅ´ ÀúÀ常 Çϸç ÃÖ¼ÒÈ­µÇ¾î ÀÖÀ» °æ¿ì´Â ³ë¸» À§Ä¡¿¡¼­ ½ÃÀÛÇÑ´Ù. LoadPosition¿¡´Â ´ÙÁß ¸ð´ÏÅÍ È¯°æÀÌ ¾Æ´Ò °æ¿ì ÇØ»óµµÀÇ º¯È­¿¡ ÀÇÇØ È­¸é ¹Ù±ùÀ¸·Î À©µµ¿ì°¡ ³ª°¬´ÂÁö Á¶»çÇÏ¿© À§Ä¡¸¦ Á¶Á¤ÇÏ´Â Äڵ尡 ÀÛ¼ºµÇ¾î ÀÖ¾ú´Âµ¥ ÀÌ ÄÚµå´Â ºÒÇÊ¿äÇÏ´Ù.

¿Ö³ÄÇϸé SetWindowPlacement ÇÔ¼ö°¡ ´ÙÁß ¸ð´ÏÅͱîÁö °í·ÁÇؼ­ À§Ä¡¸¦ Á¶Á¤Çϱ⠶§¹®Àε¥ ÀÌ ÇÔ¼ö´Â ÁöÁ¤ÇÑ ÁÂÇ¥°¡ ÇöÀç ¸ð´ÏÅÍ ±¸¼º¿¡¼­ º¸ÀÌÁö ¾Ê´Â ¿µ¿ªÀ̸é ÁÖ ¸ð´ÏÅÍ ¾ÈÂÊÀ¸·Î ³Ö¾îÁØ´Ù. °ú°Å GetWindowRect·Î À©µµ¿ì ÁÂÇ¥¸¦ Á¶»çÇÏ°í MoveWindow·Î º¹±¸ÇÒ ¶§´Â ÀÌ·± 󸮰¡ ÇÊ¿äÇß¾úÀ¸³ª Áö±ÝÀº ÇÊ¿ä°¡ ¾ø´Ù. ¹°·Ð À־ ¹«ÇØÇÏÁö¸¸ ºÒÇÊ¿äÇÑ ÄÚµå´Â °¡±ÞÀû »¡¸® Áö¿ö¾ß ÇÑ´Ù. °³¹ßÀÚ°¡ API ÇÔ¼öÀÇ »ó¼¼ÇÑ µ¿ÀÛ¿¡ ´ëÇØ Àß ¼÷ÁöÇÏÁö ¸øÇ߱⠶§¹®¿¡ ÀÌ·± ºÒÇÊ¿äÇÑ Äڵ尡 ÀÛ¼ºµÇ¾ú´Ù.

ÆÄÀÏ °Ë»ö ÇÔ¼ö ¼öÁ¤

FindInFiles ÇÔ¼ö´Â Á¶°Ç¿¡ ¸Â´Â ÆÄÀϵéÀ» °Ë»öÇÏ¿© Äݹé ÇÔ¼ö·Î Àü´ÞÇÏ´Â ¾ÆÁÖ Æí¸®ÇÑ ÇÔ¼öÀÌ´Ù. ¼­ºê µð·ºÅ丮±îÁö ¸ðµÎ °Ë»öÇÏ·Á¸é Àç±Í È£ÃâÀ» µ¿¿øÇØ¾ß ÇÏ°í ¿ÍÀϵå Ä«µå½ÄÀ» ÀÛ¼ºÇÏ´Â °Íµµ ¹«Ã´ ¹ø°Å·Î¿îµ¥ ÀÌ ÇÔ¼ö¸¦ »ç¿ëÇϸé ÇÁ·Î±×·¥Àº °Ë»öÇÑ °á°ú¸¸À» ½±°Ô Àü´Þ¹ÞÀ» ¼ö ÀÖ´Ù. ±×·±µ¥ ÀÌ ÇÔ¼ö¿¡ ¾à°£ÀÇ ¹ö±×°¡ ÀÖ¾î ÀϺΠÆÄÀÏÀ» °Ë»öÇÏÁö ¸øÇÏ´Â ¹®Á¦°¡ ÀÖ´Ù. °Ë»öµÈ ÆÄÀÏÀÌ Á¶°Ç¿¡ ¸Â´ÂÁö´Â IsMatch ÇÔ¼ö°¡ °Ë»çÇϴµ¥ ÀÌ ÇÔ¼ö¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

BOOL IsMatch(TCHAR *Path, TCHAR *Pattern)

{

     ....

          CharUpper(Pat);

        if (Pat[0]=='*' && Pat[1]=='.') {

           if (lstrcmpi(Pat+1,Ext)==0) {

               return TRUE;

           }

        }

          p1=Name;

          p2=Pat;

 

ÆÄÀÏ À̸§Àº Åë»ó name.ext ±¸Á¶·Î µÇ¾î ÀÖÀ¸¸ç . µÚÂÊ¿¡ È®ÀåÀÚ¸¦ ¾´´Ù. ±×·±µ¥ ¿äÁòÀº ÆÄÀϸíÀ» ÀÛ¼ºÇÒ ¶§ À̸§ Áß°£¿¡µµ .ÀÌ ¿Ã ¼ö ÀÖ¾î "a.b.c.d.txt" °°Àº ÆÄÀÏÀ» ¸¸µé ¼ö ÀÖ´Ù. IsMatch ÇÔ¼ö´Â È®ÀåÀÚ¿Í »ó°ü¾øÀÌ ¹®ÀÚ ´ÜÀ§·Î ºñ±³Çϱ⠶§¹®¿¡ *.txt ÇüÅ·Π°Ë»ö½ÄÀÌ ÁÖ¾îÁö¸é ÀÌ ÆÄÀÏÀ» Á¦´ë·Î °Ë»öÇÏÁö ¸øÇÑ´Ù. a¿Í *¸¦ ´ëÀÀ½ÃÅ°°í ³²Àº .b.c.d.txt¿Í .txt¸¦ ºñ±³Çϸé Ʋ¸° ¹®ÀÚ¿­·Î ÆǴܵDZ⠶§¹®ÀÌ´Ù. ±×·¡¼­ °Ë»ö½ÄÀÌ *.extÇüÅÂÀÎ °æ¿ì´Â . µÚÂÊÀÇ È®ÀåÀÚ¿Í _splitpath ÇÔ¼ö°¡ ºÐ¸®ÇÑ È®ÀåÀÚ¸¸ ºñ±³Çß´Ù.

FindInFiles ÇÔ¼ö ÀÚü¿¡µµ ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù. µð·ºÅ丮¸¦ ¸¸³ª¸é ¾ÈÂÊÀ» °Ë»öÇ쵂 ´Ü ù ¹®ÀÚ°¡ .À̸é ÀÚ±â ÀÚ½ÅÀ̳ª ºÎ¸ð µð·ºÅ丮À̹ǷΠ°Ë»ö ´ë»ó¿¡¼­ Á¦¿ÜÇß´Ù. ÀÌ Á¶°ÇÀº Á¡À¸·Î ½ÃÀÛÇÏ¸é ¼ûÀº µð·ºÅ丮¶ó´Â ±ÔÄ¢ÀÌ ÀÖ´Â FAT¿¡¼­´Â ¿ÇÁö¸¸ 32ºñÆ® ÆÄÀÏ ½Ã½ºÅÛ(FAT32, NTFS)¿¡¼­´Â ¿ÇÁö ¾Ê´Ù. ÃֽŠÆÄÀÏ ½Ã½ºÅÛÀº Á¡À¸·Î ½ÃÀÛÇÏ´Â µð·ºÅ丮 À̸§À» ¸¸µé ¼ö ÀÖ´Â °ÍÀÌ´Ù. ±×·¡¼­ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ¾ß ÇÑ´Ù.

 

void FindInFiles(TCHAR *Path, TCHAR *Pattern, DWORD Flags, FIFCALLBACK pCallBack, LPVOID pCustom)

{

     ....

     while (nResult) {

          wsprintf(szFinded,"%s\\%s",Path,wfd.cFileName);

          if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {

           if (lstrcmp(wfd.cFileName,".") && lstrcmp(wfd.cFileName,"..")) {

                   if (

                        ((wfd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN)==0 || (Flags & FIF_INCHID))

                        && ((Flags & FIF_DIRFILTER)==0 || IsMatch(szFinded, Pattern))

                        ) {

                        pCallBack(szFinded,wfd.dwFileAttributes,pCustom);

                   }

               if (Flags & FIF_DEEP) {

                        FindInFiles(szFinded,Pattern,Flags,pCallBack,pCustom);

                   }

           }

          } else {

          ....

 

Á¡À¸·Î ½ÃÀÛÇÑ´Ù°í Çؼ­ ¼û°ÜÁø µð·ºÅ丮¶ó°í º¼ ¼ö ¾øÀ¸¸ç "." ¶Ç´Â ".."ÀÎÁö¸¦ ¹®ÀÚ¿­ ºñ±³ ÇÔ¼ö·Î Á¤È®ÇÏ°Ô ºñ±³ÇØ¾ß ÇÑ´Ù.

ºÎ¸ðÀÇ Áß¾ÓÀ¸·Î À̵¿

ºÎ¸ð À©µµ¿ìÀÇ Áß¾ÓÀ¸·Î À̵¿ÇÏ´Â MoveToParentCenter ÇÔ¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù. 1.0ÀÇ ÀÌ ÇÔ¼ö´Â ºÎ¸ð°¡ ¹«Á¶°Ç ÀÖ´Ù°í °¡Á¤ÇÏ¸ç ºÎ¸ð°¡ ÃÖ¼ÒÈ­µÇ¾î ÀÖ´Â »óȲÀ» ó¸®ÇÏÁö ¾Ê´Âµ¥ ºñÇØ ÀÌ ÇÔ¼ö´Â Á» ´õ ´Ù¾çÇÑ »óȲÀ» ó¸®ÇÑ´Ù´Â Á¡ÀÌ ´Ù¸£´Ù.

 

void MoveToParentCenter(HWND hWnd)

{

     RECT wrt,crt;

     HWND hParent;

 

     hParent=GetParent(hWnd);

     if (hParent == NULL) {

          return;

     }

     if (IsIconic(hParent)) {

          ShowWindow(hParent,SW_RESTORE);

     }

 

     GetWindowRect(hParent,&wrt);

     GetWindowRect(hWnd,&crt);

     SetWindowPos(hWnd,HWND_NOTOPMOST,wrt.left+(wrt.right-wrt.left)/2-(crt.right-crt.left)/2,

          wrt.top+(wrt.bottom-wrt.top)/2-(crt.bottom-crt.top)/2,0,0,SWP_NOSIZE);

}

 

ºÎ¸ð°¡ ¾ø´Â »óȲÀº À©µµ¿ì°¡ »ý¼ºÁßÀÏ ¶§ ÀϽÃÀûÀ¸·Î ¹ß»ýÇÒ ¼ö Àִµ¥ ÈÅÅ·À» ÅëÇØ À©µµ¿ì »ý¼º ½ÃÁ¡¿¡¼­ À©µµ¿ì¸¦ À̵¿ÇÏ°íÀÚ ÇÒ ¶§ Àá½Ã ÀÌ·± »óÅ°¡ µÉ ¼ö ÀÖ´Ù. ºÎ¸ð¸¦ ¸ð¸£´Â »óȲ¿¡¼­ ºÎ¸ðÀÇ Áß¾ÓÀ¸·Î À̵¿ÇÒ ¼ö ¾øÀ¸¹Ç·Î À̶§´Â ¾Æ¹« Àϵµ ÇÏÁö ¾Ê´Â´Ù. ºÎ¸ð°¡ ÃÖ¼ÒÈ­µÇ¾î ÀÖÀ» ¶§´Â ÃÖ¼ÒÈ­µÈ ºÎ¸ð¸¦ º¹±¸½ÃÅ°°í ±× Áß¾ÓÀ¸·Î À̵¿ÇØ¾ß ÇÑ´Ù.

¹Ù.°£´ÜÇÑ ±â´É °³¼±

´ÙÀ½ ÀåºÎÅÍ ´ç±Ù¿¡ ¸¹Àº ±â´ÉµéÀÌ ÀÛ¼ºµÉ °ÍÀÌ´Ù. ±× Àü¿¡ °£´ÜÇÏ°Ô ¼öÁ¤ÇÒ ¼ö ÀÖ´Â °³¼± »çÇ×À» ã¾Æ Àû¿ëÇØ º¸ÀÚ. ½ºÅ¸ÀÏ Çϳª ¹Ù²Ù´Â °³¼± Á¤µµ¸¸À¸·Îµµ »ç¿ëÇÏ´Â ÀÔÀå¿¡¼­´Â ±²ÀåÈ÷ Æí¸®ÇØÁú ¼öµµ ÀÖ´Ù.

 

ÄÞº¸ÀÇ µå·Ó´Ù¿î ¸®½ºÆ® Æø

ÆÄÀÏ¿¡¼­ ã±â ´ëÈ­»óÀÚÀÇ ÄÞº¸ ¹Ú½º ÆøÀÌ Á¼¾Æ¼­ ±ä °æ·Î¸¦ ãÀ» ¶§ ´Ù º¸ÀÌÁö ¾Ê´Â ºÒÆíÇÔÀÌ ÀÖ´Ù.

´ëÈ­»óÀÚÀÇ ÆøÀÌ Á¼¾Æ ÄÞº¸ ¹Ú½º ÀÚüÀÇ ÆøÀ» ´Ã¸®±â´Â ¾î·Á¿îµ¥ ÀÌ·² ¶§´Â ¾Æ·¡·Î ÆîÃÄÁö´Â µå·Ó ¹Ú½ºÀÇ Æø¸¸ ´Ã¸± ¼ö ÀÖ´Ù. ÄÞº¸ ¹Ú½º·Î CB_SETDROPDOWNWIDTH ¸Þ½ÃÁö¸¸ º¸³»¸é µÈ´Ù.

 

BOOL CALLBACK FileFindDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     ....

     case WM_INITDIALOG:

     ....

        SendDlgItemMessage(hDlg,IDC_FIND_FOLDER,CB_SETDROPPEDWIDTH,500,0);

          return TRUE;

 

¾ÆÁÖ ³Ë³ËÇÏ°Ô 500Çȼ¿ Á¤µµ·Î Àâ¾Ò´Âµ¥ ÀÌ Á¤µµ ÆøÀ̸é À¢¸¸Å­ ±ä °æ·Îµµ Ç¥½ÃÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼öÁ¤ ÈÄ¿¡ ÄÞº¸ ¹Ú½º¸¦ ¿­¾î º¸¸é ÄÁÆ®·ÑÀÇ Æøº¸´Ù ´õ ³ÐÀº µå·Ó ´Ù¿î ¸®½ºÆ®°¡ ¿­·Á ÇÑ´«¿¡ ¸ñ·ÏÀ» ÆľÇÇÒ ¼ö ÀÖ´Ù.

±×·¯³ª °æ·Î°¡ ªÀ» ¶§´Â ¿ÀÈ÷·Á Á» º¸±â ½È¾îÁú ¼öµµ Àִµ¥ ¿¹»Û ¸ð¾çº¸´Ù´Â ÆíÀǼº¿¡ ÁßÁ¡À» µÎ°í ÃæºÐÇÑ ÆøÀ» ¼³Á¤Çß´Ù.

µå·¡±×ÁßÀÇ Ä³·µ

º¹»ç ¹× À̵¿À» À§ÇØ ¼±Åà ¿µ¿ªÀ» µå·¡±×ÁßÀÏ ¶§´Â ij·µÀ» È帮°Ô º¸ÀÌ°Ô ÇØ º¸ÀÚ. ÃÖÃÊ µå·¡±×¸¦ ½ÃÀÛÇÒ ¶§ ij·µÀ» È帮°Ô ¸¸µé¸é µÈ´Ù.

 

void CApiEdit::OnLButtonDown(HWND hWnd, BOOL fDoubleClick, int x, int y, UINT keyFlags)

{

     ....

     if (IsInSelection(x+xPos, y+yPos) && bReadOnly==FALSE && bAllowDrag) {

          bDragSel=TRUE;

          SetCapture(hWnd);

          bCapture=TRUE;

        DestroyCaret();

        CreateCaret(hWnd,(HBITMAP)1,2,FontHeight);

        ShowCaret(hWnd);

          return;

     }

     ....

 

±âº» ij·µÀ» Æı«ÇÏ°í µÎ ¹ø° Àμö¸¦ 1·Î ÁÖ¾î ij·µÀ» ´Ù½Ã ¸¸µé¸é È帰 ij·µÀÌ µÈ´Ù. OnMouseMove¿¡¼­´Â ij·µÀÇ À§Ä¡¸¸ º¯°æÇϹǷΠ¹öÆ°À» ³õ¾Æ SetCaret ÇÔ¼ö°¡ ´Ù½Ã È£ÃâµÉ ¶§±îÁö È帰 ¸ð¾çÀ» °è¼Ó À¯ÁöÇÑ´Ù. ÀÌ·¸°Ô ÇÑ´Ù°í Çؼ­ ÇÁ·Î±×·¥ÀÌ Æ¯º°È÷ Æí¸®ÇØÁö´Â °ÍÀº ¾øÁö¸¸ µå·¡±×ÇÒ ¶§¿Í ÀÔ·ÂÇÒ ¶§¸¦ ±¸ºÐÇÏ¸é ¿ØÁö ¸ÚÀÖ¾î º¸ÀδÙ. ÀÌ ±â´ÉÀÌ ¿ÀÈ÷·Á ´õ ºÒÆíÇÏ´Ù¸é Â÷ÈÄ ¿É¼ÇÀ¸·Î ¸¸µé ¼öµµ ÀÖ´Ù.

´ëÈ­»óÀÚ Áß¾Ó¿¡ ¿­±â

ÆÄÀÏ ¿­±â ´ëÈ­»óÀÚ¿Í ¼³Á¤ ´ëÈ­»óÀÚÀÇ Ãʱâ À§Ä¡¸¦ º°µµ·Î ÁöÁ¤ÇÏÁö ¾Ê±â ¶§¹®¿¡ Ç×»ó ÀÛ¾÷¿µ¿ªÀÇ Á»ó´Ü¿¡ ¿­¸°´Ù. ´ëÈ­»óÀÚµéÀº ¸ðµÎ ÀÛ¾÷¿µ¿ª Áß¾Ó¿¡ ¿­¸®°í °Ë»ö ´ëÈ­»óÀÚ´Â ÃÖÈÄ ¿­·È´ø À§Ä¡¿¡ ¿­¸®Áö¸¸ ÀÌ µÎ ´ëÈ­»óÀÚ´Â ±×·¸Áö ¾Ê¾Æ ¹«Ã´ ºÒÆíÇÏ°í º¸±â ½È´Ù. °øÅë ´ëÈ­»óÀÚ¿Í ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ À§Ä¡¸¦ º¯°æÇÏ´Â °ÍÀº º¸±âº¸´Ù ÈξÀ ´õ ¾î·Æ´Ù. ¿Ö³ÄÇϸé GetOpenFileName ÇÔ¼ö³ª PropertySheet ÇÔ¼ö´Â ³»ºÎ¿¡¼­ ¸ðµç ÀÏÀ» ´Ù ó¸®ÇØ ¹ö¸®¹Ç·Î À§Ä¡¸¦ ¿Å±æ¸¸ÇÑ ÀûÀýÇÑ ½ÃÁ¡À» ã±â ¾î·Æ±â ¶§¹®ÀÌ´Ù.

ÀÌ µÎ ´ëÈ­»óÀÚÀÇ À§Ä¡¸¦ ¿Å±â·Á¸é CBT ÈÅÀ» ¼³Ä¡ÇÏ°í À©µµ¿ì°¡ »ý¼ºµÇ´Â ½ÃÁ¡¿¡ ¼­ºêŬ·¡½ÌÇÑ ÈÄ WM_INITDIALOG ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ºÎ¸ðÀÇ Áß¾ÓÀ¸·Î À̵¿ÇÏ´Â ¾î·Á¿î °úÁ¤À» °ÅÃÄ¾ß ÇÑ´Ù. ÈÅ ÇÚµéÀ» ÀúÀåÇÒ Àü¿ª º¯¼ö¸¦ ¼±¾ðÇÏ°í CBTÈÅÀ» ¼³Ä¡ÇØ º¸ÀÚ. Dangeun.cpp¿¡ ´ÙÀ½ Äڵ带 ÀÛ¼ºÇÑ´Ù.

 

HHOOK hCbtHook;

 

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

{

     ....

     hCbtHook=SetWindowsHookEx(WH_CBT,DgCbtHookProc,NULL,GetCurrentThreadId());

     return 0;

}

 

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

{

     ....

     UnhookWindowsHookEx(hCbtHook);

}

 

OnCreate¿¡¼­ CBT Áö¿ª ÈÅÀ» ¼³Ä¡Çß°í OnDestroy¿¡¼­ ÈÅÀ» ÇØÁ¦Çß´Ù. CBT ¸Þ½ÃÁö¸¦ °¡·Îç ÈÅ ÇÁ·Î½ÃÀú´Â Danguen.cpp¿¡ ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù. ¹°·Ð Çì´õ ÆÄÀÏ¿¡ ¿øÇüµµ ¼±¾ðÇØ¾ß ÇÑ´Ù.

 

LRESULT CALLBACK DgCbtHookProc(int nCode,WPARAM wParam,LPARAM lParam)

{

     CBT_CREATEWND *pCbt;

     HWND hWnd;

     TCHAR szClassName[32];

     WNDPROC OldProc;

 

     if (nCode == HCBT_CREATEWND) {

          hWnd=(HWND)wParam;

          pCbt=(CBT_CREATEWND *)lParam;

 

          if (HIWORD(pCbt->lpcs->lpszClass)) {

              lstrcpy(szClassName,pCbt->lpcs->lpszClass);

          } else {

              GlobalGetAtomName((ATOM)pCbt->lpcs->lpszClass,szClassName,32);

          }

 

          if (lstrcmpi(szClassName,"#32770")==0 && ((pCbt->lpcs->style & WS_CHILD)==0)) {

              OldProc=(WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC);

              SetProp(hWnd,"OldProp",OldProc);

              SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)DgNewDlgProc);

          }

     }

     return CallNextHookEx(hCbtHook,nCode,wParam,lParam);

}

 

À©µµ¿ì°¡ »ý¼ºµÉ ¶§ ÀÏÁ¤ÇÑ Á¶°ÇÀ» Á¡°ËÇϴµ¥ ´ëÈ­»óÀÚÀÌ°í Â÷Àϵ尡 ¾Æ´Ñ À©µµ¿ì¸¸ ¼­ºêŬ·¡½ÌÇÑ´Ù. ÀÌ ½ÃÁ¡¿¡¼­ À©µµ¿ìÀÇ À§Ä¡¸¦ ¿Å±â´Â °ÍÀº °¡´ÉÇÏÁö¸¸ ¾ÆÁ÷ À©µµ¿ì°¡ »ý¼ºµÈ °ÍÀÌ ¾Æ´Ï¸ç ´©°¡ ºÎ¸ðÀÎÁö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ ºÎ¸ðÀÇ Áß¾ÓÀ¸·Î ¿Å±â´Â °ÍÀº ºÒ°¡´ÉÇÏ´Ù. ±×·¡¼­ ºÎ¸ð¸¦ ¾Ë ¼ö ÀÖ´Â ÃÖÃÊÀÇ ½ÃÁ¡ÀÎ WM_INITDIALOG ¸Þ½ÃÁö¸¦ ¹Þ±â À§ÇØ ¼­ºêŬ·¡½ÌÇÑ´Ù. ÀÌÀü À©µµ¿ì ÇÁ·Î½ÃÀúÀÇ ÁÖ¼Ò´Â º¹±¸¸¦ À§ÇØ À©µµ¿ì ÇÁ·ÎÆÛƼ¿¡ ÀúÀåÇØ µÐ´Ù. ¼­ºêŬ·¡½º ÇÁ·Î½ÃÀú´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

LRESULT CALLBACK DgNewDlgProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     WNDPROC OldProc;

     OldProc=(WNDPROC)GetProp(hWnd,"OldProp");

     TCHAR szCap[128];

     LRESULT ret;

 

     switch(iMessage) {

     case WM_INITDIALOG:

          MoveToParentCenter(hWnd);

          ret=CallWindowProc(OldProc,hWnd,iMessage,wParam,lParam);

          GetWindowText(hWnd,szCap,128);

          if (lstrcmp(szCap,"¼³Á¤")==0) {

              MoveToParentCenter(hWnd);

          }

          return ret;

     case WM_NCDESTROY:

          SetWindowLong(hWnd,GWL_WNDPROC,(DWORD)OldProc);

          RemoveProp(hWnd,"OldProp");

          break;

     }

     return CallWindowProc(OldProc,hWnd,iMessage,wParam,lParam);

}

 

´ëÈ­»óÀÚ°¡ ÃʱâÈ­µÉ ¶§ MoveToParentCenter ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ÀÏ´Ü ºÎ¸ðÀÇ Áß¾ÓÀ¸·Î À̵¿Çß´Ù. ´Ü, ÇÁ·ÎÆÛƼ ½ÃÆ®´Â WM_INITDIALOG¿¡¼­ ÀÚ½ÅÀÌ À§Ä¡¸¦ ´Ù½Ã ¿Å±â±â ¶§¹®¿¡ ÀÌÀü ÇÁ·Î½ÃÀú·Î ÀÌ ¸Þ½ÃÁö¸¦ º¸³» ĸ¼Ç ¹®ÀÚ¿­À» º¯°æÇÏ°Ô ÇÏ°í ĸ¼ÇÀÌ "¼³Á¤"À̸é MoveToParentCenter ¸¦ ´Ù½Ã È£ÃâÇÏ¿© Áß¾ÓÀ¸·Î °­Á¦·Î ´Ù½Ã À̵¿ÇØ¾ß ÇÑ´Ù.

ÆÄÀÏ ¿­±â ´ëÈ­»óÀÚ´Â ÃÖÃÊ ½ÇÇàµÉ ¶§´Â º°´Ù¸¥ 󸮸¦ ÇÏÁö ¾ÊÁö¸¸ µÎ¹ø° ¿­¸± ¶§ ºÎÅÍ´Â ÃÖÈÄÀÇ À§Ä¡¸¦ ½º½º·Î ±â¾ïÇϹǷΠÀÌÀü ÇÁ·Î½ÃÀú°¡ ¿Å±ä ÀÚ¸®¸¦ ±×´ë·Î À¯ÁöÇÏ´Â °ÍÀÌ ÁÁ´Ù. ĸ¼ÇÀ» Á¶»çÇÏÁö ¾Ê°í ¹«Á¶°Ç Áß¾ÓÀ¸·Î ´Ù½Ã ¿Å°Ü ¹ö¸®¸é ÆÄÀÏ ¿­±â °øÅë ´ëÈ­»óÀÚµµ Ç×»ó Áß¾Ó¿¡¸¸ ¿­¸± °ÍÀÌ´Ù. À§ ÄÚµå´Â °£´ÜÇÏ°Ô ÀÛ¼ºÇϱâ À§ÇØ Ä¸¼Ç ¹®ÀÚ¿­ »ó¼ö¸¦ ¼Ò½º¿¡ °ð¹Ù·Î »ç¿ëÇߴµ¥ ÀÌ·¸°Ô Çϸé Â÷ÈÄ¿¡ ´Ù±¹¾î ¹öÀüÀ» ¸¸µé ¶§ ´Ù¼Ò ºÒ¸®ÇØÁø´Ù.

´ëÈ­»óÀÚÀÇ À§Ä¡¸¦ ¿Å±â´Â Á¤µµÀÇ ±â¼úµµ ½ÇÁ¦ Àû¿ëÇØ º¸¸é ´Ù¼Ò ¾î·Á¿îµ¥ ÀÌ ½Ç½ÀÀº ÈÅÅ·À» ¸ð¸£¸é ÀÌÇØÇϱ⠾î·Æ´Ù. ¸¸¾à À§ Äڵ尡 ¾î·Æ°Ô ´À²¸Áø´Ù¸é ÈÅÅ·À» ¸ÕÀú °øºÎÇÑ ÈÄ ´Ù½Ã ÀÐ¾î º¸±â ¹Ù¶õ´Ù. °£´ÜÇØ º¸ÀÌÁö¸¸ ÈÅÅ·°ú ¼­ºê Ŭ·¡½ÌÀ» ¸ðµÎ ÀÌÇØÇؾ߸¸ »ç¿ëÇÒ ¼ö ÀÖ´Â ´Ù¼Ò ³­À̵µ°¡ ÀÖ´Â ±â¼úÀÌ´Ù.

Ä¿¼­ À̵¿ °³¼±

¹®¼­ÀÇ Á¦ÀÏ Ã¹ ÁÙ¿¡¼­´Â ´õ ÀÌ»ó À§·Î ¿Ã¶ó°¥ ¼ö ¾ø°í ¸¶Áö¸· ÁÙ¿¡¼­´Â ´õ ³»·Á°¥ °÷ÀÌ ¾ø´Ù. ±×·¡¼­ VK_UP, VK_DOWN Å° ó¸® ·çƾÀº ù ÁÙ°ú ¸¶Áö¸· ÁÙ¿¡¼­ÀÇ ¾Æ·¡ À§ À̵¿À» ´Ü¼øÈ÷ ¹«½ÃÇÑ´Ù. ¾ÆÁÖ ´ç¿¬ÇÑ ¾ê±âó·³ µé¸®°ÚÁö¸¸ ÀÌ·± µ¿ÀÛÀÌ ¶§·Î´Â ºÒÆíÇÒ ¼öµµ ÀÖ´Ù. ƯÈ÷ ¾Æ·¡ÂÊÀ¸·Î À̵¿Çϸ鼭 ¹®´Ü ¼±ÅÃÀ» ÇÒ ¶§ ºÒÆíÇѵ¥ ´ÙÀ½ ±×¸²À» º¸ÀÚ.

»õ ¹®¼­¸¦ ¸¸µé°í "¾Æ¸§´Ù¿î ±Ý¼ö°­»ê" µÎ ÁÙ¸¸ ÀÔ·ÂÇÑ ÈÄ ¹®¼­ óÀ½¿¡¼­ Shift+DownÀ» ´©¸£¸é ù ÁÙÀÌ ¼±ÅõǸ鼭 µÎ ¹ø° ÁÙ·Î À̵¿ÇÑ´Ù. ÀÌ »óÅ¿¡¼­ µÎ ¹ø° ÁÙ±îÁö °°ÀÌ ¼±ÅÃÇÏ·Á¸é Shift+DownÀ» ´­·¯¼­´Â ¾ÈµÇ¸ç Shift+End¸¦ ´­·¯¾ß ÇÑ´Ù. ¸¸¾à "±Ý¼ö°­»ê" ´ÙÀ½¿¡ °³Çà Äڵ尡 ÀÖ´Ù¸é Shift+Downµµ µÇ°ÚÁö¸¸ ¸¶Áö¸· ÁÙ¿¡¼­ ¾Æ·¡·ÎÀÇ À̵¿ÀÌ ±ÝÁöµÇ±â ¶§¹®¿¡ Shift+End¸¦ ´­·¯¾ß¸¸ ÇÏ´Â °ÍÀÌ´Ù.

¼³»ç ¹®¼­ÀÇ ¸¶Áö¸·ÁÙ¿¡¼­ ´õ ³»·Á°¥ °÷ÀÌ ¾ø´Ù ÇÏ´õ¶óµµ ¹®¼­°¡ ³¡³­ °ÍÀº ¾Æ´Ï¹Ç·Î ¹öÆÛ¿¡´Â ´õ µÚÂÊÀÌ Á¸ÀçÇÑ´Ù. ±×·¡¼­ ¸¶Áö¸· ÁÙÀº Ưº°È÷ ÁÙ ³¡À¸·Îµµ À̵¿ÇÏ´Â °ÍÀÌ ÇÕ¸®ÀûÀ̸ç Æí¸®ÇÏ´Ù. À§Âʵµ ¸¶Âù°¡Áö·Î ù ÁÙ¿¡¼­ À§·Î À̵¿Àº ¹®¼­ óÀ½À¸·ÎÀÇ À̵¿À¸·Î Çؼ®ÇÒ ¼ö ÀÖÀ¸¸ç PgUp, PgDn ÇÔ¼öµµ ¸¶Âù°¡Áö·Î ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù.

 

     case VK_UP:

          if (bControl && bShift)

              return;

          GetRCFromOff(off,r,c);

         

          OldOff=off;

          if (r > 0) {

              if (bControl) {

                   SendMessage(hWnd, WM_VSCROLL, SB_LINEUP, 0L);

                   if (r != (frt.bottom+yPos)/LineHeight)

                        return;

              }

              off=GetXPosOnLine(r-1,PrevX);

          // ù ÁÙ¿¡¼­ À§·Î À̵¿Àº ¹®¼­ óÀ½À¸·Î À̵¿ÇÑ´Ù.

          } else {

              off=0;

          }

 

          if (bShift) {

              ExpandSelection(OldOff,off);

          } else {

              if (SelStart != SelEnd) {

                   off=min(SelStart, SelEnd);

                   ClearSelection();

                   SetCaret();

                   SendMessage(hWnd,WM_KEYDOWN,VK_UP,(LPARAM)0);

              }

          }

          SetCaret(FALSE);

 

          if (!bShift) {

              ClearSelection();

          }

          return;

     case VK_DOWN:

          if (bControl && bShift)

              return;

          GetRCFromOff(off,r,c);

          if (bControl) {

              SendMessage(hWnd, WM_VSCROLL, SB_LINEDOWN, 0L);

              if (r != yPos/LineHeight-1) {

                   return;

              }

          }

 

          OldOff=off;

          if (r < GetRowCount()-1) {

              off=GetXPosOnLine(r+1,PrevX);

          // ¸¶Áö¸· ÁÙ¿¡¼­ ¾Æ·¡·Î À̵¿Àº ¹®¼­ÀÇ ³¡À¸·Î À̵¿ÀÌ´Ù.

          } else {

              off=doclen;

          }

 

          if (bShift) {

              ExpandSelection(OldOff,off);

          } else {

              if (SelStart != SelEnd) {

                   off=max(SelStart, SelEnd);

                   ClearSelection();

                   SetCaret();

                   SendMessage(hWnd,WM_KEYDOWN,VK_DOWN,(LPARAM)0);

              }

          }

          SetCaret(FALSE);

 

          if (!bShift) {

              ClearSelection();

          }

          return;

 

´ëÇ¥ÀûÀ¸·Î VK_DOWN¸¸ º¸ÀÚ. ¸¶Áö¸· ÁÙÀÌ ¾Æ´Ï¸é GetXPosOnLine ÇÔ¼ö·Î ´ëÀÀµÇ´Â X À§Ä¡¸¦ ã¾Æ À̵¿ÇÏ°í ¸¶Áö¸· ÁÙÀÌ¸é ¹«Á¶°Ç ¹®¼­ ³¡À¸·Î À̵¿Çß´Ù. Shift Å°¸¦ ´©¸¥ »óŶó¸é ¼±Åõµ ¹°·Ð ÇØ¾ß ÇÑ´Ù. ¿¹¿Ü 󸮰¡ Ãß°¡µÊÀ¸·Î½á ÇÔ¼öÀÇ ±¸Á¶°¡ Á¶±Ý ¹Ù²î¾ú´Ù. PgUp, PgDnÀÇ Äڵ嵵 ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î ¼öÁ¤ÇÑ´Ù.

 

     case VK_PRIOR:

          ....

          OldOff=off;

          // ùÁÙ¿¡¼­´Â ¹®¼­ óÀ½À¸·Î À̵¿ÇÑ´Ù.

        if (r == 0) {

           off=0;

        } else {

           off=GetXPosOnLine(r,PrevX);

        }

          if (bShift) {

          ....

     case VK_NEXT:

          ....

          OldOff=off;

          // ¸¶Áö¸· ÁÙÀÌ¸é ¹®¼­ ³¡À¸·Î À̵¿ÇÑ´Ù.

        if (r == GetRowCount()-1) {

           off=doclen;

        } else {

           off=GetXPosOnLine(r,PrevX);

        }

          if (bShift) {

          ....

 

¸¶Âù°¡Áö·Î ù ÁÙ¿¡¼­´Â ¹®¼­ óÀ½À¸·Î À̵¿ÇÏ°í ¸¶Áö¸· ÁÙÀÌ¸é ¹®¼­ ³¡À¸·Î À̵¿Çß´Ù.

ȍ.assert

´ç±ÙÀº ¾ÆÁ÷µµ °³¹ßÁßÀÌ°í ¾ÕÀ¸·Îµµ ¼ö¸¹Àº ¹ö±×¿Í Èû°Ü¿î ÀüÅõ¸¦ ÇØ¾ß ÇÑ´Ù. ¹ö±×ÀÇ À§Ä¡¸¦ ÆľÇÇϱâ À§Çؼ­´Â ¹ö±×°¡ ¹ß»ýÇÑ ÁöÁ¡À» Àâ±â À§ÇÑ µ£À» ³õ¾Æ¾ß ÇÑ´Ù. ´ç±Ù 1.0Àº ½Ç½À ¿¹Á¦ÀÌ´Ù º¸´Ï assert¸¦ Çϳªµµ »ç¿ëÇÏÁö ¾Ê¾Ò´Âµ¥ assert°¡ ³Ê¹« ¸¹À¸¸é ºÐ¼®ÇÒ ¶§´Â Â¥Áõ¸¸ ³ª±â ¶§¹®ÀÌ´Ù. ±×·¯³ª ÀÌÁ¦´Â ±Ô¸ð°¡ Àû´çÈ÷ Ä¿Á³±â ¶§¹®¿¡ Àå·¡ÀÇ ¾ÈÁ¤ÀûÀÎ °³¹ßÀ» À§ÇØ assert¸¦ ¸¹ÀÌ »ðÀÔÇØ¾ß ÇÑ´Ù. ÀÌ ±â´ÉÀ» »ç¿ëÇϱâ À§ÇØ stdafx.h¿¡ assert.h¸¦ Æ÷ÇÔÇÑ´Ù.

 

#include <Shlobj.h>

#include <wininet.h>

#include <assert.h>

....

 

Ç¥ÁØ Çì´õÆÄÀÏ ¸ñ·ÏÀÇ Á¦ÀÏ ³¡¿¡ Ãß°¡ÇÑ´Ù. ÀÌÁ¦ Àǽɰ¥¸¸ÇÑ ºÎºÐ¿¡ assert È£ÃâÀ» ÀÛ¼ºÇØ ³õ´Â´Ù. Parse.cpp¿¡ ¸ÕÀú ÀÛ¼ºÇØ º¸ÀÚ.

 

void CParse::GetStyleColor(int style, COLORREF &fore, COLORREF &back)

{

    assert(style >= 0 && style < 32);

 

     fore=arStyle[style].fore;

     back=arStyle[style].back;

}

 

void CParse::GetStyleName(int style, TCHAR *szName)

{

    assert(style >= 0 && style < 32);

 

     lstrcpy(szName,arStyle[style].name);

}

 

±¸¹® ºÐ¼®±â°¡ °¡Áú ¼ö ÀÖ´Â ½ºÅ¸ÀÏÀÇ Á¾·ù´Â ÃÑ 32°³À̹ǷΠstyleÀº 0~31±îÁöÀÇ ¹üÀ§¿¡ ÀÖ¾î¾ß ÇÑ´Ù. Àú¹ø ¹öÀü¿¡¼­ ½ºÅ¸ÀÏÀÇ ¹üÀ§¸¦ ¹þ¾î³ª´Â Ä¡¸íÀûÀÎ ¹ö±×°¡ ÀÖ¾ú´Âµ¥ assert°¡ ÀÖ¾ú´Ù¸é Á» ´õ ½±°Ô ÀâÀ» ¼ö ÀÖ¾úÀ» °ÍÀÌ´Ù. ´ëºÎºÐÀÇ ¹ö±×´Â ÅؽºÆ® ÆíÁý ¿£ÁøÀÎ ApiEdit.cpp¿¡¼­ ¹ß»ýÇϴµ¥ ÀÌ ¸ðµâÀÇ °¢ ÇÔ¼öÀÇ ¼±µÎ¿¡ ´ÙÀ½ assert¹®À» ÀÛ¼ºÇÑ´Ù.

 

ÇÔ¼ö

assert¹®

Insert

assert(nPos >= 0 && nPos <= doclen);

Delete

assert(nPos >= 0 && nPos <= doclen);

GetRCFromOff

assert(nPos >= 0 && nPos <= doclen);

GetOffFromRC

assert(r >= 0 && r <= TotalLine-1);

GetXYFromOff

assert(nPos >= 0 && nPos <= doclen);

GetXPosOnLine

assert(r >= 0 && r <= TotalLine-1);

DrawLine

assert(Line >= 0 && Line <= TotalLine-1);

FindParaStart

assert(nPos >= 0 && nPos <= doclen);

 

Insert ÇÔ¼öÀÇ °æ¿ì Àμö·Î Àü´Þ¹ÞÀº nPos ¿ÀÇÁ¼ÂÀÌ 0 ÀÌ»óÀÌ°í doclen ÀÌÇÏ¿©¾ß ÇÑ´Ù. ¸¸¾à À½¼ö³ª ¹®¼­ ¹Ù±ùÂÊÀÇ ¿ÀÇÁ¼Â¿¡ »ðÀÔÇ϶ó´Â ¸í·ÉÀÌ Àü´ÞµÇ¾ú´Ù¸é ÀÌ´Â ¹º°¡ À߸øµÇ¾ú´Ù´Â ¶æÀ̸ç ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ °÷À» Áï½Ã ¼ö»öÇØ ºÁ¾ß ÇÑ´Ù. GetOffFromRC´Â Çà¿­À» ÁÖ¸é ´ëÀÀµÇ´Â ¿ÀÇÁ¼ÂÀ» ã´Âµ¥ À̶§ Çà ¹øÈ£ÀÎ rÀº 0 ÀÌ»óÀÌ°í ¹®¼­ÀÇ ¸¶Áö¸·ÁÙÀÎ TotalLine-1 ÀÌÇÏ¿©¾ß ÇÑ´Ù. ³ª¸ÓÁö ÇÔ¼öµéÀÇ Á¶°Çµµ ÁÖ·Î ¿ÀÇÁ¼Â°ú ÁÙ ¹øÈ£ÀÇ À¯È¿¼ºÀ» Á¡°ËÇÑ´Ù.

¿ÀÇÁ¼Â°ú ÁÙ¹øÈ£´Â µÑ ´Ù 0 ÀÌ»óÀÇ ¾ç¼ö¿©¾ß ÇÏ¸ç ¹®¼­ÀÇ ¹Ù±ùÀÏ ¼ö´Â ¾ø´Ù. ¾ÆÁÖ ´ç¿¬ÇÑ Á¶°ÇÀε¥ ÀÌ ´ç¿¬ÇÑ Á¶°ÇÀÌ ¸ÂÁö ¾ÊÀ» ¶§´Â ´çÀå ¿¡·¯ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÔÀ¸·Î½á ÀÌ»óÀÌ ÀÖÀ½À» Áï½Ã ¾Ë¸®´Â °ÍÀÌ assertÀÇ ÀÓ¹«ÀÌ´Ù. assert´Â º¸Åë ÇÔ¼ö ¼±µÎ¿¡¼­ ÀμöÀÇ À¯È¿¼ºÀ» Á¡°ËÇÏ´Â °ÍÀÌ º¸ÅëÀε¥ ´ÙÀ½ 4 ±ºµ¥´Â Ưº°È÷ ·çÇÁ Áß°£¿¡µµ assert¸¦ »ç¿ëÇÑ´Ù. À̸¥¹Ù Ưº° °ü¸® ´ë»óÀÌ´Ù.

 

void CApiEdit::GetXYFromOff(int nPos, int &x, int &y)

{

     ....

     x=MarginWidth;

     for (p=buf+pLine[r].Start;p!=buf+nPos;) {

        assert(p < buf+nPos);

          if (*p == '\t') {

 

int CApiEdit::GetXPosOnLine(int r,int DestX)

{

     ....

     for (p=buf+pLine[r].Start, acwidth=MarginWidth;;) {

          if (p-buf == pLine[r].End)

              break;

        assert(p < buf+pLine[r].End);

 

int CApiEdit::DrawLine(HDC hdc, int Line)

{

     ....

     for (;;) {

          for (len=0;;) {

           assert(nowoff+len <= pLine[Line].End);

 

int CApiEdit::GetOffFromXY(int x, int y)

{

     ....

     for (p=buf+pLine[r].Start,acwidth=MarginWidth;;) {

          if (p-buf == pLine[r].End) {

              break;

          }

        assert(p < buf+pLine[r].End);

 

GetXPosOnLine

DrawLine

 

´ëÇ¥ÀûÀ¸·Î GetXYFromOff ÇÔ¼öÀÇ °æ¿ì¸¦ º¸ÀÚ. ÀÌ ÇÔ¼ö´Â ¿ÀÇÁ¼Â À§Ä¡ÀÇ È­¸é ÁÂÇ¥¸¦ °è»êÇϴµ¥ nPos ¿ÀÇÁ¼ÂÀÌ ÇÑ±Û °æ°è¿¡ °ÉÃƴٰųª ÇÒ °æ¿ì Æ÷ÀÎÅÍ p°¡ ÀÌ ¿ÀÇÁ¼ÂÀ» Áö³ªÃÄ ¹ö¸± ¼öµµ ÀÖ´Ù. ÀÌ·¸°Ô µÇ¸é p°¡ ¹öÆÛ ³¡À» Áö³ª ¾û¶×ÇÑ ¸Þ¸ð¸®¸¦ ÀÐ°Ô µÇ´Âµ¥ ÀÌ·¸°Ô µÇ±â Àü¿¡ p°¡ °Ë»ö ´ë»óÀÎ nPos¸¦ Áö³ªÄ¡´ÂÁö¸¦ °¨½ÃÇÏ´Â °ÍÀÌ´Ù. DrawLineÀº LineÁÙÀ» Ãâ·ÂÇϴµ¥ ¾î¶² ÀÌÀ¯·Î LineÀÇ ³¡À» Áö³ªÄ¡¸é ÀÌ °æ¿ìµµ Ä¡¸íÀûÀÎ ¿¡·¯·Î À̾îÁø´Ù.

ÀÏ´Ü ApiEdit ¸ðµâ À§ÁÖ·Î assert¸¦ ½è´Âµ¥ Á» ´õ Á¦´ë·Î ¹ö±×¸¦ ÀâÀ¸·Á¸é °³¹ß ´Ü°è¿¡¼­ assert·Î ¿ÏÀüÈ÷ µµ¹è¸¦ ÇØ ³ö¾ß ÇÑ´Ù. assert´Â ¹®Á¦°¡ ¹ß»ýÇÑ ÁöÁ¡À» Áï½Ã ¾Ë ¼ö ÀÖ°Ô µµ¿òÀ» ÁֹǷΠ¹ö±×ÀÇ ¹ß»ý À§Ä¡¸¦ ½±°Ô ÃßÀûÇÒ ¼ö ÀÖ´Ù. ´ç±Ù 1.0¿¡¼­´Â ¼Ò½º¿¡ °¡±ÞÀû ÇÊ¿äÇÑ ³í¸®¸¸ Ç¥ÇöÇÏ·Á°í ÇÏ´Ù º¸´Ï assert¸¦ ÀÚÀçÇߴµ¥ ¾ÕÀ¸·Î´Â Á¶±ÝÀÌ¶óµµ ÇÊ¿äÇÏ´Ù°í ÆǴܵǴ °÷¿¡ assert¸¦ ¸¶±¸ »ç¿ëÇÒ °ÍÀÌ´Ù. ±Ô¸ð°¡ Å« ÇÁ·ÎÁ§Æ®Àϼö·Ï ¹ö±×ÀÇ Á¸À縦 »¡¸® ¾Æ´Â °ÍÀÌ Áß¿äÇÏ´Ù.