»õ·Î¿î ±â´ÉÀ» Ãß°¡Çϱâ Àü¿¡ ¸ÕÀú ½Ç½À Áغñ¸¦ Á» ÇÏÀÚ. ÀÌÀü ¹öÀüÀÇ ¹ö±×¸¦ ¼öÁ¤ÇÏ°í ±¸Á¶ÀûÀ¸·Î ÁÁÁö ¾ÊÀº Äڵ带 ¸®ÆÑÅ丵ÇÏ¿© ½Ç½ÀÇϱâ ÆíÇÑ È¯°æÀ» ¸¸µç´Ù. Dangeun12 Æú´õ¸¦ ¸ù¶¥ º¹»çÇÏ°í Æú´õ À̸§¸¸ Dangeun13À¸·Î º¯°æÇÏ¿© »çº» ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé¸ç ÀÌÈÄÀÇ ÇÁ·ÎÁ§Æ®µµ ÀÌ·± ½ÄÀ¸·Î »çº»À» °è¼Ó ¸¸µé¾î ³ª°¡¸é µÈ´Ù. À̷νá 1±Ç¿¡¼ ÀÛ¼ºÇß´ø ¸ðµç ¼º°ú¹°À» °è½ÂÇÔÀº ¹°·ÐÀÌ°í º°·Î ¹Ý°©Áö´Â ¾ÊÁö¸¸ ¹ö±×¿Í ±¸Á¶ÀûÀÎ ¹®Á¦±îÁöµµ °í½º¶õÈ÷ ¹°·Á ¹Þ°Ô µÈ´Ù. CD-ROM¿¡¼ º¹»çÇÒ °æ¿ì Àбâ Àü¿ë ¼Ó¼ºÀ» ÇØÁ¦ÇØ¾ß ÇÁ·ÎÁ§Æ®¸¦ ¼öÁ¤ÇØ º¼ ¼ö ÀÖ´Ù.
ÀÌ·¸°Ô ¸¸µç »çº» ÇÁ·ÎÁ§Æ®¸¦ ±×´ë·Î ¸±¸®ÁîÇϸé 1.0°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÑ ½ÇÇà ÆÄÀÏÀÌ ¸¸µé¾îÁú °ÍÀÌ´Ù. »çº»À» ÄÄÆÄÀÏÇßÀ¸¹Ç·Î ´ç¿¬ÇÑ ¾ê±â°ÚÁö¸¸ Áö±ÝºÎÅÍ ÀÌ »çº»Àº Á¶±Ý¾¿ Á¶±Ý¾¿ ´Þ¶óÁú °ÍÀÌ´Ù. ¹ö±×µµ ¼öÁ¤ÇÏ°í »õ·Î¿î ±â´Éµµ Çϳª µÑ¾¿ ´Ã¾î³´Ù. »õ·Î ¸¸µç »çº» ÇÁ·ÎÁ§Æ®·Î ´çÀå µå·¯³ª´Â °£´ÜÇÑ ¹ö±×¸¸ °íÄ¡±â·Î ÇÑ´Ù. ¾Ë°í´Â ÀÖ´õ¶óµµ Â÷ÈÄ ±Ùº»ÀûÀÎ ±¸Á¶°¡ ¹Ù²î¸é ÀÚ¿¬½º·´°Ô ÇØ°áµÇ´Â ¹ö±×µµ ÀÖ°í °ü·Ã ±â´ÉÀ» È®ÀåÇÒ ¶§ °°ÀÌ ¼öÁ¤ÇÏ´Â °ÍÀÌ È¿À²ÀûÀÎ ¹ö±×µµ Àִµ¥ ÀÌ·± ¹ö±×´Â ´çºÐ°£ ³ë¿î ¹ö±×·Î ³²°ÜµÐ´Ù.
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¿¡µµ ¿ÀŸµéÀÌ ¸¹ÀÌ Àִµ¥ ¿ì¼± º° ºÎÀÛ¿ëÀÌ ¾ø´Â ´Ü¼ø ¿ÀŸºÎÅÍ ¼öÁ¤ÇÑ´Ù.
´ç±ÙÀº ÁÙ ´ÜÀ§ ´õºí ¹öÆÛ¸µÀ» »ç¿ëÇϴµ¥ 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±îÁö À߸ø ¾µ Á¤µµ·Î ²Ï ¸¹ÀÌ Á¹·È´ø ¸ð¾çÀÌ´Ù.
´ÙÀ½Àº ½±°Ô ¹ß°ßÇÒ ¼ö ÀÖ´Â °£´ÜÇÑ ¹ö±×µéÀÌ´Ù. ´Ü¼øÇÑ ¿ÀŸ·Î ¹ß»ýÇÑ ¹ö±×µµ ÀÖ°í ½Ç¼ö·Î ´©¶ôÇÑ Äڵ嵵 Àִµ¥ ±×´ÙÁö Ä¡¸íÀûÀÎ ¹ö±×´Â ¾Æ´ÏÁö¸¸ ¹ß°ßµÈ ÀÌ»ó ÀÏ´Ü ¼öÁ¤Çϱâ·Î ÇÑ´Ù. ÀÌ ½Ç½ÀÀ» ÇØ º¸¸é ¿Ö ¹ö±×¶ó´Â °ÍÀÌ »ý±â´ÂÁö ¾î¶² Á¡À» ÁÖÀÇÇØ¾ß ÇÏ´ÂÁö¸¦ ´À³¥ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
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ÇØ ¹ö¸®±â ¶§¹®¿¡ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÈ ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀÌ Á¦´ë·Î º¹±¸µÇÁö ¾Ê¾Ò´Ù. ÇÁ·ÎÁ§Æ® ¸ñ·ÏÀ» ÀÏ´Ü ¸ÕÀú ¿¾î ³õ°í Àμö¸¦ Á¡°ËÇϵµ·Ï ÄÚµåÀÇ ¼ø¼¸¸ ¹Ù²Ù¸é µÈ´Ù.
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ÀÌ ¾Æ´Ï±â¸¸ Çϸé ÀÚµ¿ °³Çà »óÅÂÀÎ °ÍÀÌ ¿Ç´Ù.
¹®ÀÚ¿À» Ãâ·ÂÇÏ´Â ±âº» ÇÔ¼öÀÎ 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 ¹öÀüÀ» ½ÇÇàÇؼ ¼³Ä¡ ÇØÁ¦¸¦ Çؾ߸¸ ·¹Áö½ºÆ®¸® Ç׸ñÀ» Áö¿ï ¼ö ÀÖÀ¸¹Ç·Î ºÒÆíÇÏ´Ù. »õ·Î¿î ¿¬°á ¹æ½ÄÀ» ¾²±â·Î °áÁ¤ÇßÀ¸¹Ç·Î ÀÌÀü ÄÚµå´Â ¾Æ¿¹ »èÁ¦ÇØ ¹ö¸®´Â °ÍÀÌ ÁÁ´Ù.
´ç±ÙÀº ÃÖ±Ù ¿¬ ÆÄÀÏ ¸ñ·Ï °ü¸®¸¦ À§ÇØ 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) {
....
¸¶Âù°¡Áö·Î ù ÁÙ¿¡¼´Â ¹®¼ óÀ½À¸·Î À̵¿ÇÏ°í ¸¶Áö¸· ÁÙÀÌ¸é ¹®¼ ³¡À¸·Î À̵¿Çß´Ù.
´ç±ÙÀº ¾ÆÁ÷µµ °³¹ßÁßÀÌ°í ¾ÕÀ¸·Îµµ ¼ö¸¹Àº ¹ö±×¿Í Èû°Ü¿î ÀüÅõ¸¦ ÇØ¾ß ÇÑ´Ù. ¹ö±×ÀÇ À§Ä¡¸¦ ÆľÇÇϱâ À§Çؼ´Â ¹ö±×°¡ ¹ß»ýÇÑ ÁöÁ¡À» Àâ±â À§ÇÑ µ£À» ³õ¾Æ¾ß ÇÑ´Ù. ´ç±Ù 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¸¦ ¸¶±¸ »ç¿ëÇÒ °ÍÀÌ´Ù. ±Ô¸ð°¡ Å« ÇÁ·ÎÁ§Æ®Àϼö·Ï ¹ö±×ÀÇ Á¸À縦 »¡¸® ¾Æ´Â °ÍÀÌ Áß¿äÇÏ´Ù.