º¯°æ °¨½Ã¸¦ ÇÏ·Á¸é ÆíÁýÇÏ°í ÀÖ´ø ÆÄÀÏÀÇ »óŸ¦ ÀúÀåÇسõ¾Æ¾ß ÇÑ´Ù. ±×·¡¾ß ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÆÄÀÏÀ» º¯°æÇÒ ¶§ º¯°æµÇ¾ú´ÂÁö ºñ±³ÇØ º¼ ¼ö ÀÖ´Ù. ´ÙÀ½ ±¸Á¶Ã¼´Â ÆíÁýÆÄÀÏÀÇ ÇöÀç »óŸ¦ ÀúÀåÇÑ´Ù. Dangeun.cppÀÇ ¼±µÎ¿¡ ÀÌ ±¸Á¶Ã¼¸¦ ¼±¾ðÇÏÀÚ.
struct FileInfo
{
HWND hWnd;
DWORD size;
FILETIME st;
};
FileInfo *pEditings;
ÆÄÀÏÀ» ÆíÁýÇÏ°í ÀÖ´Â ÆíÁýâÀÇ ÇÚµé, ÆíÁýÆÄÀÏÀÇ Å©±â¿Í ÃÖÈÄ·Î ÆÄÀÏÀÌ º¯°æµÈ ½Ã°£À¸·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ÀÌ ±¸Á¶Ã¼ÀÇ ¹è¿À» Á¤ÀÇÇ쵂 ÇÑ ¹ø¿¡ ÆíÁýÇÒ ¼ö ÀÖ´Â ÆÄÀÏ ¼öÀÇ ÇÑ°è´Â µû·Î ¾øÀ¸¹Ç·Î ¹è¿ÀÇ Å©±â´Â µ¿ÀûÀ¸·Î °áÁ¤ÇØ¾ß ÇÑ´Ù. ±×·¡¼ ±¸Á¶Ã¼ Æ÷ÀÎÅÍ pEditings¸¦ ¼±¾ðÇÏ°í ÆíÁýÆÄÀÏÀÇ °³¼ö¸¸Å ÀÌ ±¸Á¶Ã¼¸¦ ÇÒ´çÇÒ °ÍÀÌ´Ù.
ÀÌ ±¸Á¶Ã¼ ¹è¿¿¡ ÆÄÀÏÀÇ ÇöÀç »óŸ¦ ±â·ÏÇÒ ½ÃÁ¡Àº ÇÁ·Î±×·¥ÀÌ ºñÈ°¼ºÈµÉ ¶§ÀÌ´Ù. ´Ù¸¥ ÇÁ·Î±×·¥À¸·Î ÆÄÀÏÀ» ¿·Á¸é ´ç±Ù ÆíÁý±â°¡ ºñÈ°¼ºÈµÇ¾î¾ß ÇϹǷΠÀ̶§ »óŸ¦ ÀúÀåÇÏ¸é µÈ´Ù. ÀÌ·¸°Ô ÀúÀåµÈ »óÅ´ ´ç±ÙÀÌ ´Ù½Ã È°¼ºÈµÉ ¶§ ¿ø·¡ ÀúÀåÇسõÀº °Í°ú ºñ±³ÇØ º»´Ù. ºñÈ°¼ºÈµÉ ¶§¿Í ´Ù½Ã È°¼ºÈµÇ¾úÀ» ¶§ÀÇ »óŸ¦ ºñ±³Çغ¸¸é ÆíÁýÁßÀÎ ÆÄÀÏÀÌ ¼öÁ¤µÇ¾ú´ÂÁö ¾Æ´ÑÁö¸¦ ¾Ë ¼ö ÀÖ´Ù. µÎ ½ÃÁ¡ ¸ðµÎ WM_ACTIVATEAPP ¸Þ½ÃÁö°¡ Àü´ÞµÇ¸ç wParamÀÇ °ª¸¸ ´Ù¸£¹Ç·Î ÀúÀå ÄÚµå, ºñ±³ ÄÚµå´Â ¸ðµÎ OnActivateApp ÇÔ¼ö¿¡ ÀÛ¼ºµÈ´Ù.
void OnActivateApp(HWND hWnd,WPARAM wParam,LPARAM lParam)
{
static BOOL bOnlyOne=TRUE;
RECT drt;
HWND hChild;
SInfo *pSi;
int idx=0;
HANDLE hFile;
DWORD size;
FILETIME st;
TCHAR Mes[512];
if (bOnlyOne) {
if (GetSystemMetrics(SM_CXSCREEN) < 800) {
SetRect(&drt,10,10,500,300);
} else {
SetRect(&drt,10,10,700,500);
}
LoadPosition(hWnd,KEY"Position",&drt);
bOnlyOne=FALSE;
}
if (wParam) {
if (Option.bWatchChange && pEditings) {
for (idx=0;pEditings[idx].hWnd!=NULL;) {
pSi=(SInfo *)GetWindowLong(pEditings[idx].hWnd,0);
hFile=CreateFile(pSi->NowFile,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE) {
size=GetFileSize(hFile,NULL);
GetFileTime(hFile,NULL,NULL,&st);
if (pEditings[idx].size!=size ||
CompareFileTime(&pEditings[idx].st,&st)!=0) {
wsprintf(Mes,"%s ÆÄÀÏÀÌ ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ÀÇÇØ º¯°æµÇ¾ú½À´Ï´Ù. "
"ÀÌ ÆÄÀÏÀ» ´Ù½Ã ÀÐÀ¸½Ã°Ú½À´Ï±î?",pSi->NowFile);
if (Option.bReloadNoAsk || MessageBox(g_hFrameWnd, Mes,
"º¯°æ °¨½Ã", MB_YESNO)==IDYES) {
RevertFile(pEditings[idx].hWnd);
}
}
CloseHandle(hFile);
}
idx++;
}
free(pEditings);
pEditings=NULL;
}
} else {
if (Option.bWatchChange && g_ChildNum) {
pEditings=(FileInfo *)malloc(sizeof(FileInfo)*(g_ChildNum+1));
hChild=GetWindow(g_hMDIClient,GW_CHILD);
while (hChild) {
pSi=(SInfo *)GetWindowLong(hChild,0);
if (strncmp(pSi->NowFile,"À̸§¾øÀ½",8) && strnicmp(pSi->NowFile,"http",4)
&& strnicmp(pSi->NowFile,"ftp",3)) {
pEditings[idx].hWnd=hChild;
hFile=CreateFile(pSi->NowFile,0,0,NULL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (hFile!=INVALID_HANDLE_VALUE) {
pEditings[idx].size=GetFileSize(hFile,NULL);
GetFileTime(hFile,NULL,NULL,&pEditings[idx].st);
CloseHandle(hFile);
idx++;
}
}
hChild=GetWindow(hChild,GW_HWNDNEXT);
}
pEditings[idx].hWnd=NULL;
}
}
}
wParamÀº È°¼ºÈµÉ ¶§ TRUEÀÌ¸ç ºñÈ°¼ºÈµÉ ¶§ FALSEÀÌ´Ù. ¸ÕÀú ºñÈ°¼ºÈµÉ ¶§ÀÇ Ã³¸®¸¦ º¸ÀÚ. ÆíÁý »óŸ¦ ÀúÀåÇÒ Á¶°ÇÀº µÎ °¡ÁöÀε¥ bWatchChange ¿É¼ÇÀÌ ¼±ÅõǾî ÀÖ°í ÃÖ¼ÒÇÑ Çϳª ÀÌ»óÀÇ ÆíÁýâÀÌ ¿·Á ÀÖ¾î¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ ÀÌ µ¿ÀÛÀ» Çã¶ôÇÏÁö ¾Ê¾Ò°Å³ª ÀúÀåÇÒ ´ë»óÀÌ ¾ø´Ù¸é ¾Æ¹« °Íµµ ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
pEditings ¹è¿Àº ÆíÁýâÀÇ °³¼ö¿¡ ³¡ Ç¥½Ã¸¦ À§ÇÑ 1À» ´õÇÑ Å©±â¸¸Å ÇÒ´çµÈ´Ù. ¸ðµç Â÷Àϵ带 ¼øȸÇÏ¸é¼ ÆÄÀÏÀÇ Å©±â¿Í ÃÖÈÄ ¼öÁ¤ ½Ã°£À» ±â·ÏÇسõ´Â´Ù. ´Ü, ¾ÆÁ÷ ÀúÀåµÇÁö ¾ÊÀº ¹®¼, ±×·¯´Ï±î ¡®À̸§¾øÀ½ n¡¯¿¡ ´ëÇÑ Á¤º¸´Â ±â·ÏÇÒ ÇÊ¿ä¾ø´Ù. ¿Ö³ÄÇÏ¸é ¾ÆÁ÷ ¸Þ¸ð¸®¿¡¸¸ ÀÖ´Â ¹®¼À̹ǷΠ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÀÌ ¹®¼¸¦ º¯°æÇÒ ¸®´Â Àý´ë·Î ¾ø±â ¶§¹®ÀÌ´Ù. ¿ø°ÝÁö¿¡ ÀÖ´Â ÆÄÀϵµ ºñ±³ÇϱⰡ ¾î·Á¿ì¹Ç·Î º¯°æ °¨½Ã ´ë»ó¿¡¼ Á¦¿ÜµÈ´Ù. ¼¼ °³ÀÇ ¹®¼¸¦ ÆíÁýÇÏ°í ÀÖÀ» ¶§ pEditings¿¡´Â ´ÙÀ½°ú °°ÀÌ Á¤º¸°¡ ±â·ÏµÈ´Ù.
ÀÌ ÇÁ·Î±×·¥ÀÌ ´Ù½Ã È°¼ºÈµÉ ¶§ ÀÌ Á¤º¸¿Í ÆÄÀÏÀÇ ÇöÀç »óŸ¦ ºñ±³Çغ¸¸é º¯°æ ¿©ºÎ¸¦ ¾Ë ¼ö ÀÖ´Ù.