ÇÁ·ÎÁ§Æ®´Â ÆÄÀÏâÀÇ Æ®¸® ºä¿¡ ·ÎÄà µå¶óÀ̺ê¿Í ÇÔ²² ³ªÅ¸³ª´Âµ¥ µÎ °³ÀÇ ÀÌÁúÀûÀÎ ³ëµå°¡ °°ÀÌ Ç¥½ÃµÊ¿¡µµ ÀüÇô ¾î»öÇϰųª µ¿ÀÛ»óÀÇ ÀÌ»óÇÑ Á¡ÀÌ °ÅÀÇ ¾ø´Ù. 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À¸·Î ³Ñ°ÜÁÖ¸é µÈ´Ù. ÇÁ·ÎÁ§Æ®¸¦ ÆíÁýÇÏ°í ÇÁ·ÎÁ§Æ® ÆÄÀÏÀ» °»½ÅÇÏ´Â ¸ðµç ÀÛ¾÷Àº ÇÁ·ÎÁ§Æ® °ü¸® ´ëÈ»óÀÚ°¡ ¾Ë¾Æ¼ ÇϹǷΠÀÌ ÇÔ¼ö´Â ´ÜÁö ÇÁ·ÎÁ§Æ® °æ·Î¿Í ÇÔ²² ´ëÈ»óÀÚ¸¦ ¶ç¿öÁֱ⸸ ÇÏ¸é µÈ´Ù.
ÇÁ·ÎÁ§Æ® ´Ý±â ¸í·ÉÀÌ ¼±ÅõǸé Æ®¸® ºä¿¡¼ ÇÁ·ÎÁ§Æ® ³ëµå¸¦ Á¦°ÅÇϱ⸸ ÇÏ¸é µÈ´Ù. ÇÁ·ÎÁ§Æ®¸¦ ´Ý´Â´Ù´Â °ÍÀº ´õ ÀÌ»ó ÀÌ ÇÁ·ÎÁ§Æ®¸¦ ÅëÇØ ÆÄÀÏÀ» ¿Áö ¾Ê°Ú´Ù´Â ¶æÀ̹ǷΠÆÄÀÏâ¿¡¼ »ç¶óÁö´Â °ÍÀÌ °ð ÇÁ·ÎÁ§Æ®¸¦ ´Ý´Â °ÍÀÌ´Ù.