¶ó. ÇÁ·ÎÁ§Æ®ÀÇ Æ˾÷¸Þ´º

ÇÁ·ÎÁ§Æ®´Â ÆÄÀÏâÀÇ Æ®¸® ºä¿¡ ·ÎÄà µå¶óÀ̺ê¿Í ÇÔ²² ³ªÅ¸³ª´Âµ¥ µÎ °³ÀÇ ÀÌÁúÀûÀÎ ³ëµå°¡ °°ÀÌ Ç¥½ÃµÊ¿¡µµ ÀüÇô ¾î»öÇϰųª µ¿ÀÛ»óÀÇ ÀÌ»óÇÑ Á¡ÀÌ °ÅÀÇ ¾ø´Ù. DGFileProc ÇÔ¼ö¸¦ ÀÛ¼ºÇÒ ¶§´Â ÇÁ·ÎÁ§Æ®¿¡ ´ëÇØ ÀüÇô °í·ÁÇÏÁö ¾Ê¾ÒÀ½¿¡µµ ºÒ±¸ÇÏ°í ÇÁ·ÎÁ§Æ® Áö¿øÀ» À§ÇØ DGFileProcÀº ÀüÇô ¼öÁ¤µÇÁö ¾Ê¾Ò´Ù. ÀÌ·¸°Ô µÇ´Â ÀÌÀ¯´Â LoadProject ÇÔ¼ö°¡ ÆÄÀÏâ¿¡ ÇÁ·ÎÁ§Æ®¸¦ ´ë½Å µî·ÏÇÏ°í ÀÖ°í GetNodePath ÇÔ¼ö°¡ ÇÁ·ÎÁ§Æ® ³ëµå¸¦ ÀνÄÇϵµ·Ï ¼öÁ¤µÇ¾ú±â ¶§¹®ÀÌ´Ù.

DGFileProc ÇÔ¼ö ÀÚü´Â ÇÁ·ÎÁ§Æ® Áö¿øÀ» À§ÇÑ ¿©ºÐÀÇ Äڵ尡 °ÅÀÇ ÇÊ¿ä¾ø°í ´õ Ãß°¡ÇØ¾ß ÇÒ ÄÚµå´Â Æ˾÷¸Þ´º Áö¿ø ÄÚµå»ÓÀÌ´Ù. ·ÎÄà µå¶óÀ̺êÀÇ Æ˾÷¸Þ´º¿Í ÇÁ·ÎÁ§Æ®ÀÇ Æ˾÷¸Þ´º´Â Á¶±Ý Â÷ÀÌ°¡ ³ª´Âµ¥ ÇÁ·ÎÁ§Æ®¿¡ ÀÌ¹Ì ¼Ò¼ÓµÈ ÆÄÀÏÀ» »èÁ¦ÇѴٰųª À̸§À» ¹Ù²Ù´Â ±â´ÉÀº ÇÁ·ÎÁ§Æ® °ü¸® ´ëÈ­»óÀÚ¿¡ ÀÖÀ¸¹Ç·Î ÆÄÀÏâ¿¡´Â ÀÖÀ» ÇÊ¿ä°¡ ¾ø´Ù. ´ë½Å ÇÁ·ÎÁ§Æ®¸¦ ´Ý°Å³ª ÆíÁýÇÏ´Â ¸í·ÉÀÌ ÇÊ¿äÇÏ´Ù.

Æ˾÷¸Þ´º¸¦ ¿©´Â À§Ä¡¿¡ µû¶ó ÇÊ¿äÇÑ ¸Þ´ºÇ׸ñÀÌ ´Þ¶óÁö¸ç ¸®¼Ò½º¿¡´Â µÎ ¹úÀÇ Æ˾÷¸Þ´º°¡ ÀÌ¹Ì ÀÛ¼ºµÇ¾î ÀÖ´Ù. ÆÄÀÏ⠴ݱ⳪ »ìÆ캸±â ¸ðµå µîÀÇ ¸í·ÉÀº µÎ ¸Þ´º°¡ °øÀ¯ÇÑ´Ù. Æ˾÷¸Þ´º¸¦ Ãâ·ÂÇÏ´Â WM_CONTEXTMENU°¡ ¼öÁ¤µÇ¾î¾ß ÇÏ°í Ãß°¡µÈ ¸í·ÉÀ» WM_COMMAND¿¡¼­ ó¸®ÇØ¾ß ÇÑ´Ù.

 

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

{

     TVHITTESTINFO ht;

     ....

     case WM_CONTEXTMENU:

          POINT pt;

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

 

          ht.pt.x=LOWORD(lParam);

          ht.pt.y=HIWORD(lParam);

          ScreenToClient(hWnd,&ht.pt);

          TreeView_HitTest(hFileTree,&ht);

          TreeView_SelectItem(hFileTree,ht.hItem);

 

          for (tNode=ht.hItem;tNode2=TreeView_GetParent(hFileTree,tNode);tNode=tNode2);

          TV.mask=TVIF_IMAGE;

          TV.hItem=tNode;

          TreeView_GetItem(hFileTree,&TV);

 

          if (TV.iImage == DGI_PROJECT) {

              hPopup=GetSubMenu(hMenu, 2);

          } else {

              hPopup=GetSubMenu(hMenu, 1);

               if (Option.bShowHidden) {

                   CheckMenuItem(hMenu, IDM_FILEWND_HIDDEN, MF_BYCOMMAND | MF_CHECKED);

              } else {

                   CheckMenuItem(hMenu, IDM_FILEWND_HIDDEN, 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);

          }

          if (Option.bBrowseMode) {

              CheckMenuItem(hPopup, IDM_FILEWND_BROWSE, MF_BYCOMMAND | MF_CHECKED);

          } else {

              CheckMenuItem(hPopup, IDM_FILEWND_BROWSE, MF_BYCOMMAND | MF_UNCHECKED);

          }

 

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

              0, hWnd, NULL);

          DestroyMenu(hMenu);

          return 0;

 

WM_CONTEXTMENU ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ» ¶§ ¼±ÅÃµÈ ³ëµåÀÇ ·çÆ®¸¦ ã°í ·çÆ®ÀÇ À̹ÌÁö ¹øÈ£·Î ¾î¶² Æ˾÷¸Þ´º¸¦ º¸¿©ÁÙ °ÍÀΰ¡¸¦ °áÁ¤ÇÑ´Ù. ·çÆ®°¡ ÇÁ·ÎÁ§Æ® ³ëµåÀ̸é ÇÁ·ÎÁ§Æ® Æ˾÷¸Þ´º¸¦ º¸¿©ÁÖ°í ·ÎÄà µå¶óÀ̺êÀÌ¸é ±âÁ¸ÀÇ Æ˾÷¸Þ´º¸¦ º¸¿©ÁØ´Ù.

WM_COMMAND¿¡¼­´Â ÇÁ·ÎÁ§Æ® Æ˾÷¸Þ´º¿¡ Ãß°¡µÈ ¸Þ´ºÇ׸ñÀ» ó¸®ÇÑ´Ù.

 

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

{

     case WM_COMMAND:

          switch (LOWORD(wParam)) {

          ....

          case IDM_PROJECT_EDIT:

              Node=TreeView_GetSelection(hFileTree);

              for (tNode=Node;tNode2=TreeView_GetParent(hFileTree,tNode);tNode=tNode2);

              TV.mask=TVIF_PARAM;

              TV.hItem=tNode;

              TreeView_GetItem(hFileTree,&TV);

              lstrcpy(Path,(TCHAR *)TV.lParam);

              DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_PROJECT),

                   g_hFrameWnd, DgProjectProc,(LPARAM)Path);

              break;

          case IDM_PROJECT_CLOSE:

              Node=TreeView_GetSelection(hFileTree);

              for (tNode=Node;tNode2=TreeView_GetParent(hFileTree,tNode);tNode=tNode2);

              TreeView_DeleteItem(hFileTree,tNode);

              break;

 

ÇÁ·ÎÁ§Æ® ÆíÁý ¸í·ÉÀÌ ¼±ÅÃµÇ¸é ·çÆ® ³ëµåÀÇ lParam¿¡ ÀúÀåµÈ ÇÁ·ÎÁ§Æ® °æ·Î¸¦ Á¶»çÇÏ¿© ÇÁ·ÎÁ§Æ® °ü¸® ´ëÈ­»óÀÚÀÇ lParamÀ¸·Î ³Ñ°ÜÁÖ¸é µÈ´Ù. ÇÁ·ÎÁ§Æ®¸¦ ÆíÁýÇÏ°í ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ» °»½ÅÇÏ´Â ¸ðµç ÀÛ¾÷Àº ÇÁ·ÎÁ§Æ® °ü¸® ´ëÈ­»óÀÚ°¡ ¾Ë¾Æ¼­ ÇϹǷΠÀÌ ÇÔ¼ö´Â ´ÜÁö ÇÁ·ÎÁ§Æ® °æ·Î¿Í ÇÔ²² ´ëÈ­»óÀÚ¸¦ ¶ç¿öÁֱ⸸ ÇÏ¸é µÈ´Ù.

ÇÁ·ÎÁ§Æ® ´Ý±â ¸í·ÉÀÌ ¼±ÅõǸé Æ®¸® ºä¿¡¼­ ÇÁ·ÎÁ§Æ® ³ëµå¸¦ Á¦°ÅÇϱ⸸ ÇÏ¸é µÈ´Ù. ÇÁ·ÎÁ§Æ®¸¦ ´Ý´Â´Ù´Â °ÍÀº ´õ ÀÌ»ó ÀÌ ÇÁ·ÎÁ§Æ®¸¦ ÅëÇØ ÆÄÀÏÀ» ¿­Áö ¾Ê°Ú´Ù´Â ¶æÀ̹ǷΠÆÄÀÏâ¿¡¼­ »ç¶óÁö´Â °ÍÀÌ °ð ÇÁ·ÎÁ§Æ®¸¦ ´Ý´Â °ÍÀÌ´Ù.