°¡. ¹Ì´Ï Ž»ö±â

ÆÄÀÏâÀº ´ç±ÙÀÌ ³»ÀåÇÏ°í ÀÖ´Â ¹Ì´Ï Ž»ö±â¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. ¸ÞÀÎ À©µµ¿ìÀÇ ¿ÞÂÊ º®¿¡ °¢ µå¶óÀ̺êÀÇ ÆÄÀϵéÀ» º¸¿©ÁÖ°í ¿©±â¼­ ¹Ù·Î ÆÄÀÏÀ» ¿­ ¼ö ÀÖµµ·Ï ÇÏ´Â ÀåÄ¡ÀÌ´Ù. ÆÄÀÏ¿­±â ´ëÈ­»óÀÚ´Â ¼Óµµ°¡ ³Ê¹« ´À¸®°í Ž»ö±â´Â µû·Î ¿­¾î¾ß Çϱ⠶§¹®¿¡ ºÒÆíÇÏ´Ù. ±×·¡¼­ ¾Æ¿¹ ÆíÁý±â ³»ºÎ¿¡ µð½ºÅ©ÀÇ ÆÄÀÏÀ» ¹Ù·Î ¼±ÅÃÇÒ ¼ö Àִ Ž»ö±â¸¦ ³»ÀåÇϵµ·Ï Çß´Ù.

·ÎÄà µå¶óÀ̺ê¿Í ³×Æ®¿öÅ©·Î ¿¬°áµÈ µå¶óÀ̺êÀÇ Æú´õ, ÆÄÀÏ ¸ñ·ÏÀ» º¸¿©ÁÖ´Â °ÍÀÌ ÁÖµÈ ±â´ÉÀ̸ç ÆÄÀÏÀ» ¿­°Å³ª À̸§ º¯°æ, »èÁ¦ µîÀÇ °£´ÜÇÑ ÆÄÀÏ °ü¸® ±â´Éµµ ³»ÀåÇÏ°í ÀÖ´Ù. ´õ Á¤±³ÇÏ°Ô ¸¸µéÀÚ¸é ÆÄÀÏ°ú °ü·ÃµÈ ¸¹Àº ÀÛ¾÷µéÀ» ÇÒ ¼ö ÀÖ°ÚÁö¸¸ ÅؽºÆ® ÆíÁý±â ¼öÁØ¿¡¼­ ²À ÇÊ¿äÇÏ´Ù°í ÆǴܵǴ ±â´É¸¸ ÀÛ¼ºÇß´Ù. ÀÌ ±â´ÉÀÌ ²À ÇÊ¿äÇÏ´Ù°í »ý°¢µÇÁö´Â ¾ÊÁö¸¸ ´Ù¸¥ ÆíÁý±âµéµµ ÆÄÀÏâÀ» Á¦°øÇϹǷΠºñ½ÁÇÑ ½ºÆÑÀ» °®Ãß±â À§ÇØ ÀÏ´Ü ±â´ÉÀ» ±¸ÇöÇصξú´Ù. µðÆúÆ® ¼³Á¤»óÅ¿¡¼­ ÀÌ Ã¢Àº ¼û°ÜÁ® ÀÖ´Ù. ´ÙÀ½ ÇÔ¼öµéÀº ÆÄÀÏâÀ» ±¸ÇöÇϱâ À§ÇÑ º¸Á¶ ÇÔ¼öµéÀÌ´Ù.

 

BOOL IsDirEmpty(TCHAR *Path);

HTREEITEM FindInsAfter(HTREEITEM hParent, int iImage, TCHAR *Name);

int OnFindNode(TCHAR *Path,DWORD Attr,LPVOID pCustom);

void GetNodePath(HTREEITEM pNode, TCHAR *Path);

void InitTree();

void GetCurrentFolder(TCHAR *Path);

void GotoFolderInTree(TCHAR *Path);

void RefreshTree();

 

´ÙÀ½ ÄÚµå´Â ÆÄÀÏâÀ» ±¸ÇöÇϱâ À§ÇÑ Àüü ¼Ò½ºÀÌ´Ù. ¾Õ¿¡¼­ ²®µ¥±â·Î ¸¸µé¾î µÎ¾ú´ø DGFileProc ÇÔ¼ö¸¦ ´Ù½Ã ÀÛ¼ºÇßÀ¸¸ç ÆÄÀÏ ¸ñ·Ï °ü¸®¸¦ À§ÇÑ °ü·Ã À¯Æ¿¸®Æ¼ ÇÔ¼öµéÀÌ ¸¹ÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ ¼Ò½º¸¦ ÀüºÎ ´Ù ÀÔ·ÂÇϱâ´Â ¾î·Á¿ì¹Ç·Î CD-ROMÀÇ ¼Ò½º¿¡¼­ º¹»çÇØ ºÙ¿©³Ö°í Äڵ带 ºÐ¼®Çغ¸±â ¹Ù¶õ´Ù. ´ëºÎºÐ Æ®¸® ºä ÄÁÆ®·ÑÀ» ´Ù·ç´Â ÄÚµåµéÀ̸ç Æ®¸® ºä¿¡ Àͼ÷ÇÏ´Ù¸é ¾ÆÁÖ ½¬¿î ÄÚµåÀÌ´Ù.

 

enum {DGI_DRIVE, DGI_DRIVESEL, DGI_FOLDER, DGI_FOLDERSEL, DGI_FILE, DGI_FILESEL,

     DGI_PROJECT, DGI_PROJECTSEL, DGI_SUB, DGI_SUBSEL};

....

 

BOOL IsDirEmpty(TCHAR *Path)

{

     TCHAR SrchPath[MAX_PATH];

     WIN32_FIND_DATA wfd;

     HANDLE hSrch;

     BOOL nResult=TRUE;

     BOOL Result=FALSE;

     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 (wfd.cFileName[0]!=¡®.¡¯) {

                   Result=TRUE;

                   break;

              }

          } else {

              if (IsMatch(wfd.cFileName,szFilter)) {

                   Result=TRUE;

                   break;

              }

          }

          nResult=FindNextFile(hSrch,&wfd);

     }

     FindClose(hSrch);

     return Result;

}

 

HTREEITEM FindInsAfter(HTREEITEM hParent, int iImage, TCHAR *Name)

{

     HTREEITEM Node;

     TVITEM TV;

     TCHAR Text[MAX_PATH];

 

     Node=TreeView_GetNextItem(hFileTree,hParent,TVGN_CHILD);

     if (Node==NULL) {

          return TVI_FIRST;

     }

     if (iImage == DGI_FILE) {

          for (;;) {

              TV.mask=TVIF_IMAGE;

              TV.hItem=Node;

               TreeView_GetItem(hFileTree,&TV);

              if (TV.iImage== DGI_FILE) {

                   break;

              }

              Node=TreeView_GetNextSibling(hFileTree,Node);

              if (Node==NULL) {

                   return TVI_LAST;

              }

          }

     }

 

     for (;;) {

          TV.mask=TVIF_TEXT | TVIF_IMAGE;

          TV.hItem=Node;

          TV.pszText=Text;

          TV.cchTextMax=MAX_PATH;

          TreeView_GetItem(hFileTree,&TV);

          if (iImage==DGI_FOLDER && TV.iImage==DGI_FILE) {

              break;

          }

          if (lstrcmpi(Name,Text) < 0) {

              break;

          }

          Node=TreeView_GetNextSibling(hFileTree,Node);

          if (Node==NULL) {

              return TVI_LAST;

          }

     }

 

     Node=TreeView_GetPrevSibling(hFileTree,Node);

     if (Node==NULL) {

          return TVI_FIRST;

     } else {

          return Node;

     }

}

 

int OnFindNode(TCHAR *Path,DWORD Attr,LPVOID pCustom)

{

     TVINSERTSTRUCT TI;

     TVITEM TV;

     HTREEITEM hParent=(HTREEITEM)pCustom;

     HTREEITEM Node;

     TCHAR Ext[_MAX_EXT];

     TCHAR Name[MAX_PATH];

 

     _splitpath(Path,NULL,NULL,Name,Ext);

     lstrcat(Name,Ext);

 

     TI.hParent=hParent;

     TI.item.mask=TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;

     if (Attr & FILE_ATTRIBUTE_DIRECTORY) {

          if  (Name[0]==¡®.¡¯) {

              return 0;

          }

          TI.item.iImage=DGI_FOLDER;

          TI.item.iSelectedImage=DGI_FOLDERSEL;

     } else {

          TI.item.iImage=DGI_FILE;

          TI.item.iSelectedImage=DGI_FILESEL;

     }

     TI.hInsertAfter=FindInsAfter(hParent,TI.item.iImage,Name);

     TI.item.pszText=Name;

     Node=TreeView_InsertItem(hFileTree,&TI);

 

     if ((Attr & FILE_ATTRIBUTE_DIRECTORY) && IsDirEmpty(Path)) {

          TV.mask=TVIF_CHILDREN;

          TV.hItem=Node;

          TV.cChildren=1;

 

          TreeView_SetItem(hFileTree,&TV);

     }

     return 0;

}

 

void GetNodePath(HTREEITEM pNode, TCHAR *Path)

{

     HTREEITEM tNode;

     TVITEM TV;

     TCHAR Text[MAX_PATH];

     TCHAR szTemp[MAX_PATH];

 

     TV.mask=TVIF_TEXT;

     TV.pszText=Text;

     TV.cchTextMax=MAX_PATH;

     Path[0]=0;

 

     for (tNode=pNode;tNode!=NULL;) {

          TV.hItem=tNode;

          TreeView_GetItem(hFileTree,&TV);

 

          if (TreeView_GetParent(hFileTree,tNode)==NULL) {

              Text[1]=¡®:¡¯;

              Text[2]=0;

              wsprintf(szTemp,"%s%s",Text,Path);

          } else {

              wsprintf(szTemp,"\\%s%s",Text,Path);

          }

          lstrcpy(Path,szTemp);

          tNode=TreeView_GetParent(hFileTree,tNode);

     }

}

 

void InitTree()

{

     TVINSERTSTRUCT TI;

     TVITEM TV;

     HTREEITEM Node;

     TCHAR c;

     TCHAR Caption[MAX_PATH];

     UINT DriveType;

 

     TreeView_DeleteAllItems(hFileTree);

 

     TI.hParent=0;

     TI.hInsertAfter=TVI_LAST;

     TI.item.mask=TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE;

     TI.item.iImage=DGI_DRIVE;

     TI.item.iSelectedImage=DGI_DRIVESEL;

     for (c=¡®C¡¯;c<=¡®Z¡¯;c++) {

          wsprintf(Caption,"%c:\\",c);

          DriveType=GetDriveType(Caption);

          if (DriveType==DRIVE_FIXED || DriveType==DRIVE_REMOTE) {

              wsprintf(Caption,"%c µå¶óÀ̺ê",c);

              TI.item.pszText=Caption;

              Node=TreeView_InsertItem(hFileTree,&TI);

 

              TV.mask=TVIF_CHILDREN;

              TV.hItem=Node;

              TV.cChildren=1;

              TreeView_SetItem(hFileTree,&TV);

          }

     }

}

 

void GetCurrentFolder(TCHAR *Path)

{

     TVITEM TV;

     HTREEITEM Node;

 

     Node=TreeView_GetSelection(hFileTree);

     if (Node==NULL) {

          lstrcpy(Path,"");

          return;

     }

     TV.mask=TVIF_IMAGE;

     TV.hItem=Node;

     TreeView_GetItem(hFileTree,&TV);

     if (TV.iImage == DGI_FILE) {

          Node=TreeView_GetParent(hFileTree,Node);

     }

 

     GetNodePath(Node,Path);

}

 

void GotoFolderInTree(TCHAR *Path)

{

     TVITEM TV;

     HTREEITEM Node;

     TCHAR Text[MAX_PATH];

     TCHAR Part[MAX_PATH];

     TCHAR *p,*p2;

 

     if (lstrlen(Path)==0) {

          return;

     }

     Node=TreeView_GetRoot(hFileTree);

     p=Path;

     for (;;) {

          if (p==Path) {

              wsprintf(Part,"%c µå¶óÀ̺ê",Path[0]);

          } else {

              p2=strchr(p,¡¯\\¡¯);

              if (p2==NULL) {

                   lstrcpy(Part,p);

              } else {

                   lstrcpyn(Part,p,p2-p+1);

              }

          }

          for (;;) {

              TV.mask=TVIF_TEXT;

              TV.pszText=Text;

              TV.cchTextMax=MAX_PATH;

              TV.hItem=Node;

              TreeView_GetItem(hFileTree,&TV);

              if (lstrcmpi(Text,Part)==0) {

                   break;

              }

              Node=TreeView_GetNextSibling(hFileTree,Node);

              if (Node==NULL) {

                   return;

              }

          }

          TreeView_Expand(hFileTree,Node,TVE_EXPAND);

          p=strchr(p,¡¯\\¡¯);

          if (p==NULL) {

              break;

          }

          p++;

          Node=TreeView_GetChild(hFileTree,Node);

     }

     if (Node) {

          TreeView_Select(hFileTree,Node,TVGN_CARET);

          TreeView_EnsureVisible(hFileTree,Node);

     }

}

 

void RefreshTree()

{

     TCHAR LastFolder[MAX_PATH];

 

     GetCurrentFolder(LastFolder);

     InitTree();

     GotoFolderInTree(LastFolder);

}

 

LRESULT CALLBACK DGFileProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)

{

     TVITEM TV;

     HTREEITEM Node;

     TCHAR Path[MAX_PATH];

     TCHAR *szFilter;

     int idx;

     HMENU hMenu, hPopup;

     LPNMHDR hdr;

     LPNMTREEVIEW ntv;

     LPNMTVDISPINFO ndi;

     TCHAR NewPath[MAX_PATH];

     TCHAR Drive[_MAX_DRIVE];

     TCHAR Dir[_MAX_DIR];

     HTREEITEM tNode, tNode2;

 

     switch(iMessage) {

     case WM_CREATE:

          hFilter=CreateWindow("combobox",NULL,WS_CHILD | WS_VISIBLE | CBS_DROPDOWNLIST,

              0,0,0,0,hWnd,(HMENU)0,g_hInst,NULL);

 

          SendMessage(hFilter,WM_SETFONT,(WPARAM)hGul9,(LPARAM)FALSE);

 

          idx=SendMessage(hFilter,CB_ADDSTRING,0,(LPARAM)"¸ðµç ÅؽºÆ® ÆÄÀÏ");

          SendMessage(hFilter,CB_SETITEMDATA,idx,(LPARAM)"*.txt;*.c;*.cpp;*.h;*.hpp;"

              "*.html;*.htm;*.asp;*.asa;*.php;*.php3;*.php4;*.shtml;*.sql;*.ini;"

              "*.log;*.pas;*.java;*.xml");

          idx=SendMessage(hFilter,CB_ADDSTRING,0,(LPARAM)"¸ðµç ÆÄÀÏ");

          SendMessage(hFilter,CB_SETITEMDATA,idx,(LPARAM)"*.*");

          idx=SendMessage(hFilter,CB_ADDSTRING,0,(LPARAM)"ÅؽºÆ® ÆÄÀÏ");

          SendMessage(hFilter,CB_SETITEMDATA,idx,(LPARAM)"*.txt");

          idx=SendMessage(hFilter,CB_ADDSTRING,0,(LPARAM)"C/C++ ÆÄÀÏ");

          SendMessage(hFilter,CB_SETITEMDATA,idx,(LPARAM)"*.c;*.cpp;*.h;*.hpp;*.inl");

          idx=SendMessage(hFilter,CB_ADDSTRING,0,(LPARAM)"HTML ÆÄÀÏ");

          SendMessage(hFilter,CB_SETITEMDATA,idx,(LPARAM)"*.html;*.htm;*.asp;*.asa;*.php;*.php3;*.php4;*.shtml");

          idx=SendMessage(hFilter,CB_ADDSTRING,0,(LPARAM)"SQL ÆÄÀÏ");

          SendMessage(hFilter,CB_SETITEMDATA,idx,(LPARAM)"*.sql");

          SendMessage(hFilter,CB_SETCURSEL,Option.FilterIndex,0);

 

          hFileTree=CreateWindow(WC_TREEVIEW, "", WS_CHILD | WS_VISIBLE |

              TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS,

              0,0,0,0,hWnd,(HMENU)1,g_hInst,NULL);

 

          hFileImg=ImageList_LoadBitmap(g_hInst, MAKEINTRESOURCE(IDB_FILES), 16, 1, RGB(255,255,255));

          SendMessage(hFileTree, TVM_SETIMAGELIST, (WPARAM)TVSIL_NORMAL, (LPARAM)hFileImg);

 

          InitTree();

          return 0;

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          case 0:

              switch (HIWORD(wParam)) {

              case CBN_SELCHANGE:

                   Option.FilterIndex=SendMessage(hFilter,CB_GETCURSEL,0,0);

                   RefreshTree();

                   break;

              }

              break;

          case IDM_FILEWND_CLOSE:

              Option.bShowFileWnd=FALSE;

              Relayout();

              break;

          case IDM_FILEWND_REFRESH:

              RefreshTree();

              break;

          case IDM_FILEWND_HIDDEN:

              Option.bShowHidden=!Option.bShowHidden;

              RefreshTree();

              break;

          case IDM_FILEWND_BROWSE:

              Option.bBrowseMode=!Option.bBrowseMode;

              break;

          case IDM_FILEWND_DELETE:

              Node=TreeView_GetSelection(hFileTree);

              GetNodePath(Node,Path);

              Path[lstrlen(Path)+1]=0;

              SHFILEOPSTRUCT sf;

              sf.hwnd=hWnd;

              sf.wFunc=FO_DELETE;

              sf.pFrom=Path;

              sf.pTo=NULL;

              sf.fFlags=FOF_ALLOWUNDO;

              sf.lpszProgressTitle="";

              if (SHFileOperation(&sf)==0) {

                    if (sf.fAnyOperationsAborted == FALSE) {

                        TreeView_DeleteItem(hFileTree,Node);

                   }

              }

              break;

          case IDM_FILEWND_RENAME:

              Node=TreeView_GetSelection(hFileTree);

              TreeView_EditLabel(hFileTree,Node);

              break;

          }

          return 0;

     case WM_NOTIFY:

          hdr=(LPNMHDR)lParam;

          ntv=(LPNMTREEVIEW)lParam;

          ndi=(LPNMTVDISPINFO)lParam;

          if (hdr->hwndFrom == hFileTree) {

              switch (hdr->code) {

              case TVN_ITEMEXPANDING:

                   if (ntv->action==TVE_EXPAND) {

                        if (TreeView_GetChild(hFileTree,ntv->itemNew.hItem)==NULL) {

                             GetNodePath(ntv->itemNew.hItem,Path);

                             szFilter=(TCHAR *)SendMessage(hFilter,CB_GETITEMDATA,

                                 SendMessage(hFilter,CB_GETCURSEL,0,0),0);

                             bContFIF=TRUE;

                             FindInFiles(Path,szFilter,Option.bShowHidden ? FIF_INCHID:0,

                                  OnFindNode,ntv->itemNew.hItem);

                        }

                   }

                   break;

              case TVN_SELCHANGED:

                   if (Option.bBrowseMode) {

                        Node=ntv->itemNew.hItem;

                        TV.mask=TVIF_IMAGE;

                        TV.hItem=Node;

                        TreeView_GetItem(hFileTree,&TV);

                        if (TV.iImage==DGI_FILE) {

                             GetNodePath(Node,Path);

                             OpenFromFile(Path,FALSE,TRUE);

                        }

                   }

                   break;

              case NM_DBLCLK:

                   Node=TreeView_GetSelection(hFileTree);

                   if (Node) {

                        TV.mask=TVIF_IMAGE;

                        TV.hItem=Node;

                        TreeView_GetItem(hFileTree,&TV);

                        if (TV.iImage==DGI_FILE) {

                             GetNodePath(Node,Path);

                             OpenFromFile(Path);

                        }

                   }

                   break;

              case TVN_BEGINLABELEDIT:

                   for (tNode=ndi->item.hItem;tNode2=TreeView_GetParent(hFileTree,tNode);tNode=tNode2);

                   TV.mask=TVIF_IMAGE;

                    TV.hItem=tNode;

                   TreeView_GetItem(hFileTree,&TV);

                   if (tNode==ndi->item.hItem || TV.iImage != DGI_DRIVE) {

                        return TRUE;

                   } else {

                        return FALSE;

                   }

              case TVN_ENDLABELEDIT:

                   ndi=(LPNMTVDISPINFO)lParam;

                   if (ndi->item.pszText == NULL)

                        return FALSE;

                   GetNodePath(ndi->item.hItem,Path);

                   _splitpath(Path,Drive,Dir,NULL,NULL);

                   wsprintf(NewPath,"%s%s%s",Drive,Dir,ndi->item.pszText);

                   if (MoveFile(Path,NewPath)==FALSE) {

                        return FALSE;

                   }

                   return TRUE;

              case TVN_DELETEITEM:

                   if (ntv->itemOld.lParam) {

                        free((LPVOID)ntv->itemOld.lParam);

                   }

                   break;

              }

          }

          return 0;

     case WM_CONTEXTMENU:

          POINT pt;

          hMenu=LoadMenu(g_hInst, MAKEINTRESOURCE(IDR_POPUP));

          hPopup=GetSubMenu(hMenu, 1);

 

          TVHITTESTINFO ht;

          ht.pt.x=LOWORD(lParam);

          ht.pt.y=HIWORD(lParam);

          ScreenToClient(hWnd,&ht.pt);

          TreeView_HitTest(hFileTree,&ht);

          TreeView_SelectItem(hFileTree,ht.hItem);

 

          if (Option.bShowHidden) {

              CheckMenuItem(hMenu, IDM_FILEWND_HIDDEN, MF_BYCOMMAND | MF_CHECKED);

          } else {

              CheckMenuItem(hMenu, IDM_FILEWND_HIDDEN, MF_BYCOMMAND | MF_UNCHECKED);

          }

 

          if (Option.bBrowseMode) {

              CheckMenuItem(hMenu, IDM_FILEWND_BROWSE, MF_BYCOMMAND | MF_CHECKED);

          } else {

              CheckMenuItem(hMenu, IDM_FILEWND_BROWSE, MF_BYCOMMAND | MF_UNCHECKED);

          }

 

          if (TreeView_GetParent(hFileTree,ht.hItem)==NULL) {

              EnableMenuItem(hMenu, IDM_FILEWND_DELETE, MF_BYCOMMAND | MF_GRAYED);

              EnableMenuItem(hMenu, IDM_FILEWND_RENAME, MF_BYCOMMAND | MF_GRAYED);

          } else {

              EnableMenuItem(hMenu, IDM_FILEWND_DELETE, MF_BYCOMMAND | MF_ENABLED);

              EnableMenuItem(hMenu, IDM_FILEWND_RENAME, MF_BYCOMMAND | MF_ENABLED);

          }

 

          if (LOWORD(lParam)==65535) {

              pt.x=20;

              pt.y=20;

              ClientToScreen(hWnd,&pt);

              lParam=MAKELPARAM(pt.x,pt.y);

          }

          TrackPopupMenu(hPopup, TPM_LEFTALIGN, LOWORD(lParam), HIWORD(lParam),

              0, hWnd, NULL);

          DestroyMenu(hMenu);

          return 0;

     case WM_SIZE:

          MoveWindow(hFileTree,0,0,LOWORD(lParam),HIWORD(lParam)-26,TRUE);

          MoveWindow(hFilter,0,HIWORD(lParam)-23,LOWORD(lParam),350,TRUE);

          return 0;

     case WM_DESTROY:

          ImageList_Destroy(hFileImg);

          return 0;

     }

     return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

¿ÏÀüÈ÷ µ¶¸³µÈ ±â´ÉÀ» ±¸ÇöÇÏ´Â ÄÚµåµéÀ̹ǷΠ±âÁ¸ÀÇ ÄÚµå´Â °ÅÀÇ ¼öÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù. ´Ü, ÇÁ·Î±×·¥À» Á¾·áÇÒ ¶§ ÃÖÈÄ ¼±ÅÃµÈ Æú´õÀÇ À§Ä¡¸¦ ÀúÀåÇÏ°í ´Ù½Ã Àоî¿À´Â Äڵ常 ÀÛ¼ºÇÏ¸é µÈ´Ù. OnDestroy¿¡ ´ÙÀ½ Äڵ带 Ãß°¡ÇÑ´Ù.

 

void OnDestroy(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     TCHAR LastFolder[MAX_PATH];

     ....

     GetCurrentFolder(LastFolder);

     SHRegWriteString(SHCU,KEY"Setting","LastFolder",LastFolder);

}

 

GetCurrentFolder ÇÔ¼ö·Î ÆÄÀÏâ¿¡ ¼±ÅÃµÈ ¸¶Áö¸· Æú´õÀÇ À§Ä¡¸¦ ·¹Áö½ºÆ®¸®¿¡ ÀúÀåÇصξú´Ù. ÀÌ °æ·Î´Â ÃʱâÈ­°¡ ¿Ï·áµÈ ½ÃÁ¡ÀÎ OnTimer¿¡¼­ ´Ù½Ã ÀÐÇôÁø´Ù.

 

void OnTimer(HWND hWnd,WPARAM wParam,LPARAM lParam)

{

     ....

     switch (wParam) {

     case 100:

          ....

        SHRegReadString(SHCU,KEY"Setting","LastFolder","",Path,MAX_PATH);

        GotoFolderInTree(Path);

          break;

     }

}

 

·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÈ ÃÖÈÄ Æú´õ À§Ä¡¸¦ ÀÐ¾î ±× À§Ä¡¸¦ ´Ù½Ã ã¾Æ°¡µµ·Ï Çß´Ù. ÀÌ ÄÚµå´Â ÆÄÀÏâÀÇ WM_INITDIALOG¿¡ À־ »ó°ü¾ø´Ù. ±×·¯³ª ´ÙÀ½¿¡ ÀÛ¼ºÇÒ ÇÁ·ÎÁ§Æ® ±â´ÉÀ» Áö¿øÇϱâ À§ÇØ OnTimer¿¡ ¹Ì¸® ÀÛ¼ºÇصξú´Ù.