´ÙÀ½Àº ÆÄÀÏ¿¡¼ ã±â ´ëÈ»óÀÚÀ̸ç ÀÌ¹Ì ¸®¼Ò½º¿¡ ÀÛ¼ºµÇ¾î ÀÖ´Ù. ½ÃÀÛ Æú´õ¿Í °Ë»ö ÆÄÀÏ À¯Çü, °Ë»öÇÒ ¹®ÀÚ¿ ±×¸®°í °Ë»ö ¿É¼ÇÀ» ÀԷ¹޴´Ù.
¹®¼ ã±â ´ëÈ»óÀÚ¿Í ¸ð¾çÀº ºñ½ÁÇÏÁö¸¸ °Ë»ö ¿É¼ÇÀÌ Á» ´Ù¸£´Ù. ´Ü¾î´ÜÀ§·Î, ´ë¼Ò¹®ÀÚ ±¸ºÐ ¿É¼ÇÀº µ¿ÀÏÇÏÁö¸¸ ¹®¼ Àüü¸¦ °Ë»öÇϹǷΠ°Ë»ö ¹æÇâÀº ÇÊ¿ä¾ø°í µÇµ¹¸®±â ¿É¼Çµµ ÇÊ¿äÄ¡ ¾Ê´Ù. ´ë½Å ÇÏÀ§ Æú´õµµ °Ë»öÇÒ °ÍÀÎÁö¿Í °Ë»ö°á°ú¿¡¼ ÆÄÀϸíÀ» ¾î¶»°Ô Ç¥½ÃÇÒ °ÍÀΰ¡¿¡ ´ëÇÑ ¿É¼ÇÀÌ Ãß°¡µÇ¾î ÀÖ´Ù. ½ÃÀÛ Æú´õ´Â °Ë»öÀ» ½ÃÀÛÇÒ Æú´õÀÌ¸ç ´ë»ó ÆÄÀÏÀº °Ë»öÇÒ ÆÄÀÏ À̸§ ÆÐÅÏÀÌ´Ù. ¿ÍÀϵå Ä«µå Ç¥Çö½ÄÀ¸·Î ¼¼¹ÌÄÝ·ÐÀ¸·Î ²÷¾î¼ ¿©·¯ °³ÀÇ ÆÐÅÏÀ» ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.
Á¦ÀÏ ¹Ø¿¡ ÀÖ´Â ¡®½ÃÀÛ Æú´õ¸¦ ±âÁØÀ¸·Î ÇÑ ÆÄÀϸí Ç¥½Ã¡¯´Â °Ë»öµÈ ÆÄÀÏÀÇ °æ·Î¸¦ ¿ÏÀü °æ·Î·Î º¸¿©ÁÙ °ÍÀΰ¡ ¾Æ´Ï¸é ½ÃÀÛ Æú´õ¿¡¼ÀÇ »ó´ëÀûÀÎ °æ·Î·Î º¸¿©ÁÙ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ¿¹¸¦ µé¾î 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 ÇÔ¼ö´Â Àç»ç¿ëÀ» °í·ÁÇÏ¿© ÀÛ¼ºµÇ¾úÀ¸¹Ç·Î ÀϹÝÀûÀÎ Æú´õ ¼±Åà ¸ñÀûÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. Àμö·Î ºÎ¸ð À©µµ¿ìÀÇ ÇÚµé, ŸÀÌƲ¹ÙÀÇ Ä¸¼Ç, ´ëÈ»óÀÚ°¡ ¿¸± ¶§ ±âº»ÀûÀ¸·Î ¼±ÅÃµÉ Æú´õ ±×¸®°í »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ Æú´õ °æ·Î¸¦ µ¹·Á¹Þ±â À§ÇÑ ¹öÆÛ¸¦ Àü´ÞÇϱ⸸ ÇÏ¸é µÈ´Ù.