³ª. ÆÄÀÏ Á¤º¸ÀÇ ÀúÀå

º¯°æ °¨½Ã¸¦ ÇÏ·Á¸é ÆíÁýÇÏ°í ÀÖ´ø ÆÄÀÏÀÇ »óŸ¦ ÀúÀåÇسõ¾Æ¾ß ÇÑ´Ù. ±×·¡¾ß ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ ÆÄÀÏÀ» º¯°æÇÒ ¶§ º¯°æµÇ¾ú´ÂÁö ºñ±³ÇØ º¼ ¼ö ÀÖ´Ù. ´ÙÀ½ ±¸Á¶Ã¼´Â ÆíÁýÆÄÀÏÀÇ ÇöÀç »óŸ¦ ÀúÀåÇÑ´Ù. 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¿¡´Â ´ÙÀ½°ú °°ÀÌ Á¤º¸°¡ ±â·ÏµÈ´Ù.

ÀÌ ÇÁ·Î±×·¥ÀÌ ´Ù½Ã È°¼ºÈ­µÉ ¶§ ÀÌ Á¤º¸¿Í ÆÄÀÏÀÇ ÇöÀç »óŸ¦ ºñ±³Çغ¸¸é º¯°æ ¿©ºÎ¸¦ ¾Ë ¼ö ÀÖ´Ù.