³ª. ã±â/¹Ù²Ù±â ´ëÈ­»óÀÚ

´ÙÀ½Àº ÆÄÀÏ¿¡¼­ ã±â ´ëÈ­»óÀÚÀ̸ç ÀÌ¹Ì ¸®¼Ò½º¿¡ ÀÛ¼ºµÇ¾î ÀÖ´Ù. ½ÃÀÛ Æú´õ¿Í °Ë»ö ÆÄÀÏ À¯Çü, °Ë»öÇÒ ¹®ÀÚ¿­ ±×¸®°í °Ë»ö ¿É¼ÇÀ» ÀԷ¹޴´Ù.

¹®¼­ ã±â ´ëÈ­»óÀÚ¿Í ¸ð¾çÀº ºñ½ÁÇÏÁö¸¸ °Ë»ö ¿É¼ÇÀÌ Á» ´Ù¸£´Ù. ´Ü¾î´ÜÀ§·Î, ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿É¼ÇÀº µ¿ÀÏÇÏÁö¸¸ ¹®¼­ Àüü¸¦ °Ë»öÇϹǷΠ°Ë»ö ¹æÇâÀº ÇÊ¿ä¾ø°í µÇµ¹¸®±â ¿É¼Çµµ ÇÊ¿äÄ¡ ¾Ê´Ù. ´ë½Å ÇÏÀ§ Æú´õµµ °Ë»öÇÒ °ÍÀÎÁö¿Í °Ë»ö°á°ú¿¡¼­ ÆÄÀϸíÀ» ¾î¶»°Ô Ç¥½ÃÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ ¿É¼ÇÀÌ Ãß°¡µÇ¾î ÀÖ´Ù. ½ÃÀÛ Æú´õ´Â °Ë»öÀ» ½ÃÀÛÇÒ Æú´õÀÌ¸ç ´ë»ó ÆÄÀÏÀº °Ë»öÇÒ ÆÄÀÏ À̸§ ÆÐÅÏÀÌ´Ù. ¿ÍÀϵå Ä«µå Ç¥Çö½ÄÀ¸·Î ¼¼¹ÌÄÝ·ÐÀ¸·Î ²÷¾î¼­ ¿©·¯ °³ÀÇ ÆÐÅÏÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

Á¦ÀÏ ¹Ø¿¡ ÀÖ´Â ¡®½ÃÀÛ Æú´õ¸¦ ±âÁØÀ¸·Î ÇÑ ÆÄÀϸí Ç¥½Ã¡¯´Â °Ë»öµÈ ÆÄÀÏÀÇ °æ·Î¸¦ ¿ÏÀü °æ·Î·Î º¸¿©ÁÙ °ÍÀΰ¡ ¾Æ´Ï¸é ½ÃÀÛ Æú´õ¿¡¼­ÀÇ »ó´ëÀûÀÎ °æ·Î·Î º¸¿©ÁÙ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î C:\Project\Dangeun Æú´õ¿¡¼­ *.cpp ÆÄÀÏÀ» °Ë»öÇßÀ» ¶§ ÀÌ Æú´õ ¾Æ·¡ÀÇ Test\Alpha ¼­ºêÆú´õÀÇ Dg.cpp¿¡¼­ ¿øÇÏ´Â ¹®ÀÚ¿­À» ã¾Ò´Ù¸é °Ë»ö°á°úâ¿¡ ÀÌ ÆÄÀÏÀÇ °æ·Î¸¦ C:\Project\Dangeun\Test\Alpha\Dg.cpp·Î Ãâ·ÂÇÒ °ÍÀΰ¡ ¾Æ´Ï¸é Test\Alpha\Dg.cpp·Î Ãâ·ÂÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù.

¹Ù²Ù±â ´ëÈ­»óÀÚµµ °ÅÀÇ ºñ½ÁÇÏ°Ô »ý°å´Ù. ¹Ù²Ü ³»¿ë ÄÞº¸¹Ú½º°¡ Ãß°¡µÇ¾î ÀÖ´Ù´Â Á¡¸¸ »©°í ³ª¸é ã±â¿Í µ¿ÀÏÇÏ´Ù.

¹®¼­ÀÇ Ã£±â/¹Ù²Ù±â ´ëÈ­»óÀÚ¿Í ¸¶Âù°¡Áö·Î ÆÄÀÏ°Ë»ö¿¡ ÇÊ¿äÇÑ ¿É¼Ç¸¸ ÀԷ¹޾ÆÁÙ »Ó ½ÇÁ¦ ã±â¸¦ ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù. ÀÌ ´ëÈ­»óÀÚ°¡ º¸¿©ÁÖ´Â ¿É¼ÇÀº FindFlag °Ë»ö ¿É¼Ç°ú arFind °Ë»ö È÷½ºÅ丮 ¹®ÀÚ¿­ÀÌ¸ç »ç¿ëÀÚÀÇ ÀÔ·Â ³»¿ëµµ ÀÌ Àü¿ªº¯¼öµé¿¡ ÀúÀåµÈ´Ù.

µÎ ´ëÈ­»óÀÚ´Â ÅÛÇø®Æ®¸¸ ´Ù¸£¸ç Ãë±ÞÇÏ´Â ¿É¼ÇµéÀÌ °ÅÀÇ ºñ½ÁÇϱ⠶§¹®¿¡ ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú´Â °øÀ¯ÇÒ ¼ö ÀÖ´Ù. ´ëÈ­»óÀÚ ÇÁ·Î½ÃÀú´Â ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÑ´Ù.

 

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

{

     TCHAR szTemp[256];

     TCHAR Folder[MAX_PATH];

     HWND hActive;

     SInfo *pSi;

     int s,e;

 

     switch(iMessage)

     {

     case WM_INITDIALOG:

          MoveToParentCenter(hDlg);

 

          if (FindFlag & AE_FIND_WHOLEWORD) {

              CheckDlgButton(hDlg,IDC_FIND_WHOLEWORD,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_MATCHCASE) {

              CheckDlgButton(hDlg,IDC_FIND_MATCHCASE,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_RECURSIVE) {

              CheckDlgButton(hDlg,IDC_FIND_RECURSIVE,BST_CHECKED);

          }

 

          if (FindFlag & AE_FIND_SHORTPATH) {

              CheckDlgButton(hDlg,IDC_FIND_SHORTPATH,BST_CHECKED);

          }

 

          RefillHistory(GetDlgItem(hDlg,IDC_FIND_WHAT),arFind[0]);

          if (Option.bInitFind) {

              hActive=(HWND)SendMessage(g_hMDIClient,WM_MDIGETACTIVE,0,NULL);

              if (hActive != NULL) {

                   pSi=(SInfo *)GetWindowLong(hActive,0);

                   pSi->Ae.GetSelect(s,e);

                   if (s==e) {

                        pSi->Ae.GetNowWord(pSi->Ae.GetOffset(),s,e);

                   }

                   if (abs(s-e) <= 255 && abs(s-e) > 0) {

                        pSi->Ae.GetText(szTemp,256,s,e);

                        SetDlgItemText(hDlg,IDC_FIND_WHAT,szTemp);

                   }

              }

          }

          RefillHistory(GetDlgItem(hDlg,IDC_FIND_FOLDER),arFind[2]);

          RefillHistory(GetDlgItem(hDlg,IDC_FIND_TYPE),arFind[3]);

          RefillHistory(GetDlgItem(hDlg,IDC_FIND_TO),arFind[1]);

          SendMessage(GetDlgItem(hDlg,IDC_FIND_WHAT), CB_LIMITTEXT, (WPARAM)255, 0);

          SendMessage(GetDlgItem(hDlg,IDC_FIND_FOLDER), CB_LIMITTEXT, (WPARAM)MAX_PATH, 0);

          SendMessage(GetDlgItem(hDlg,IDC_FIND_TYPE), CB_LIMITTEXT, (WPARAM)255, 0);

          SendMessage(GetDlgItem(hDlg,IDC_FIND_TO), CB_LIMITTEXT, (WPARAM)255, 0);

          SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);

          return TRUE;

     case WM_COMMAND:

          switch (LOWORD(wParam))

          {

          case IDC_FIND_WHAT:

          case IDC_FIND_FOLDER:

          case IDC_FIND_TYPE:

          case IDC_FIND_TO:

              switch (HIWORD(wParam)) {

              case CBN_EDITCHANGE:

                   if (GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_WHAT)) == 0 ||

                        GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_FOLDER)) == 0 ||

                        GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_TYPE)) == 0 ||

                        (GetDlgItem(hDlg,IDC_FIND_TO) != NULL &&

                        GetWindowTextLength(GetDlgItem(hDlg,IDC_FIND_TO)) == 0)) {

                        EnableWindow(GetDlgItem(hDlg,IDC_BTNFIND),FALSE);

                   } else {

                        EnableWindow(GetDlgItem(hDlg,IDC_BTNFIND),TRUE);

                   }

                   break;

              case CBN_SELCHANGE:

                   PostMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);

                   break;

              }

              break;

          case IDC_BTN_BRFOLDER:

              GetDlgItemText(hDlg,IDC_FIND_FOLDER,szTemp,255);

              if (BrowseFolder(hDlg,"°Ë»öÀ» ½ÃÀÛÇÒ Æú´õ¸¦ ¼±ÅÃÇϽʽÿÀ.",szTemp,Folder)==TRUE) {

                   SetDlgItemText(hDlg,IDC_FIND_FOLDER,Folder);

                   SendMessage(hDlg,WM_COMMAND,MAKEWPARAM(IDC_FIND_WHAT,CBN_EDITCHANGE),0);

              }

              return TRUE;

          case IDC_BTNFIND:

               if (IsDlgButtonChecked(hDlg,IDC_FIND_WHOLEWORD)) {

                   FindFlag |= AE_FIND_WHOLEWORD;

              } else {

                   FindFlag &= ~AE_FIND_WHOLEWORD;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_MATCHCASE)) {

                   FindFlag |= AE_FIND_MATCHCASE;

              } else {

                   FindFlag &= ~AE_FIND_MATCHCASE;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_RECURSIVE)) {

                   FindFlag |= AE_FIND_RECURSIVE;

              } else {

                   FindFlag &= ~AE_FIND_RECURSIVE;

              }

 

              if (IsDlgButtonChecked(hDlg,IDC_FIND_SHORTPATH)) {

                   FindFlag |= AE_FIND_SHORTPATH;

              } else {

                   FindFlag &= ~AE_FIND_SHORTPATH;

              }

 

              GetDlgItemText(hDlg,IDC_FIND_WHAT,szTemp,255);

              if (lstrlen(szTemp)) {

                   arFind[0].Add(szTemp);

              }

              GetDlgItemText(hDlg,IDC_FIND_FOLDER,szTemp,255);

              if (lstrlen(szTemp)) {

                   arFind[2].Add(szTemp);

              }

              GetDlgItemText(hDlg,IDC_FIND_TYPE,szTemp,255);

              if (lstrlen(szTemp)) {

                   arFind[3].Add(szTemp);

              }

              GetDlgItemText(hDlg,IDC_FIND_TO,szTemp,255);

              if (lstrlen(szTemp)) {

                   arFind[1].Add(szTemp);

              }

              EndDialog(hDlg,IDOK);

              return TRUE;

          case IDCANCEL:

              EndDialog(hDlg,IDCANCEL);

              return TRUE;

          }

          return FALSE;

     }

     return FALSE;

}

 

¾Õ¿¡¼­ ÀÛ¼ºÇß´ø ã±â/¹Ù²Ù±â ´ëÈ­»óÀÚÀÇ ÇÁ·Î½ÃÀú¿Í °ÅÀÇ À¯»çÇϹǷΠƯº°È÷ ºÐ¼®Çغ¼¸¸Å­ ¾î·Á¿î ÄÚµå´Â ¾ø´Ù. ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â °Ë»ö ¿É¼ÇÀ» º¸¿©ÁÖ°í ´ëÈ­»óÀÚ¸¦ ´ÝÀ» ¶§ ÄÁÆ®·Ñ¿¡¼­ ´Ù½Ã °Ë»ö ¿É¼ÇÀ» ÀоîµéÀÌ´Â °ÍÀÌ ÁÖ ±â´ÉÀÌ´Ù. °Ë»ö ½ÃÀÛ Æú´õ¸¦ ã¾ÆÁÖ´Â ±â´ÉÀ» À§ÇØ Æú´õ ã¾Æº¸±â À¯Æ¿¸®Æ¼ ÇÔ¼ö¸¦ Util.cpp¿¡ Ãß°¡ÇÑ´Ù.

 

 

 

int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)

{

     switch (uMsg)

     {

     case BFFM_INITIALIZED:

          if (lpData != NULL) {

              SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)lpData);

          }

          break;

     }

     return 0;

}

 

BOOL BrowseFolder(HWND hParent, LPCTSTR szTitle, LPCTSTR StartPath, TCHAR *szFolder)

{

     LPMALLOC pMalloc;

     LPITEMIDLIST pidl;

     BROWSEINFO bi;

 

     bi.hwndOwner = hParent;

     bi.pidlRoot = NULL;

     bi.pszDisplayName = NULL;

     bi.lpszTitle = szTitle ;

     bi.ulFlags = 0;

     bi.lpfn = BrowseCallbackProc;;

     bi.lParam = (LPARAM)StartPath;

                           

     pidl = SHBrowseForFolder(&bi);

 

     if (pidl == NULL) {

          return FALSE;

     }

     SHGetPathFromIDList(pidl, szFolder);

 

     if (SHGetMalloc(&pMalloc) != NOERROR) {

          return FALSE;

     }

     pMalloc->Free(pidl);

     pMalloc->Release();

     return TRUE;

}

 

Æú´õ ¼±Åà °øÅë ´ëÈ­»óÀÚ¶ó´Â °ÍÀº Á¦°øµÇÁö ¾ÊÀ¸¹Ç·Î SHBrowseForFolder ½© ÇÔ¼ö·Î Æú´õ¸¦ ÀÔ·Â¹Þ¾Æ¾ß ÇÑ´Ù. ÀÌ ÇÔ¼ö´Â Æú´õ°£ÀÇ ±¸ºÐÀ» À§ÇØ PIDLÀ̶ó´Â ´Ù¼Ò »ý¼ÒÇÑ Å¸ÀÔÀ» »ç¿ëÇÏ°í ±¸Á¶Ã¼°¡ º¹ÀâÇϱ⠶§¹®¿¡ ½±°Ô ¾µ ¼ö ÀÖµµ·Ï BrowseFolder¶ó´Â ·¡ÆÛ ÇÔ¼ö¸¦ ¸¸µé¾úÀ¸¸ç °Ë»ö ½ÃÀÛ Æú´õ·Î ´ëÈ­»óÀÚ¸¦ ÃʱâÈ­Çϱâ À§ÇØ Äݹé ÇÔ¼ö¸¦ Á¤ÀÇÇÏ¿´´Ù. Äݹé ÇÔ¼ö´Â BrowseFolder ÇÔ¼ö¸¸ »ç¿ëÇϹǷΠUtil.h¿¡ ¿øÇüÀ» ¼±¾ðÇÏÁö ¾Ê¾Æµµ µÈ´Ù. ÀÌ ÇÔ¼ö°¡ º¸¿©ÁÖ´Â ´ëÈ­»óÀÚ´Â ´ÙÀ½°ú °°Àº ¸ð¾çÀ» ÇÏ°í ÀÖ´Ù.

ÇÑ ¹øÂëÀº ±¸°æÇØ ºÃÀ½Á÷ÇÑ ´ëÈ­»óÀÚÀÏ °ÍÀÌ´Ù. BrowseFolder ÇÔ¼ö´Â Àç»ç¿ëÀ» °í·ÁÇÏ¿© ÀÛ¼ºµÇ¾úÀ¸¹Ç·Î ÀϹÝÀûÀÎ Æú´õ ¼±Åà ¸ñÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Àμö·Î ºÎ¸ð À©µµ¿ìÀÇ ÇÚµé, ŸÀÌƲ¹ÙÀÇ Ä¸¼Ç, ´ëÈ­»óÀÚ°¡ ¿­¸± ¶§ ±âº»ÀûÀ¸·Î ¼±ÅÃµÉ Æú´õ ±×¸®°í »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ Æú´õ °æ·Î¸¦ µ¹·Á¹Þ±â À§ÇÑ ¹öÆÛ¸¦ Àü´ÞÇϱ⸸ ÇÏ¸é µÈ´Ù.