제가 shellcontextmenu를 프로그램에 사용하고 있는데 contextmenu를 보여줘야 하는 코드입니다.(contextmenu에 메뉴를 추가하는 것이 아니라)
얼마전 까지는 한 폴더의 파일들을 대상으로만 메뉴를 보여주면 되었는데, 지금은 여러폴더의 파일들을 대상으로 메뉴를 보여줘야 합니다.
탐색기의 [검색] 기능으로 검색을 하면 하드디스크의 여러 폴더에 있는 파일들이 검색되잖아요. 그 검색된 파일들을 선택하고 팝업메뉴를 띄우는 것과 같이 해야 하거든요.
특정 폴더의 파일들을 대상으로할 때는 shellfolder 를 쓰면되는데 여러 폴더의 파일이 섞여 있을 때는 어찌해야 하는지... 아무리 뒤져봐도 답을 찾을 수가 없네요.
Contextmenu 보여주는 코드 부분--------------------------------------
<!--CodeS-->
ShellFolder.GetUIObjectOf(Handle, PIDLCount, PIDL, IID_IContextMenu, nil, ContextMenu); // 이 부분에서 shellfolder를 어떻게 처리해야 할지요? 위에서 말씀드렸다시피 폴더가 여러개인데... 음냐. 제발 답변 좀 주세요. 미치겠습니다.
if ContextMenu = nil then Exit;
PopupMenu := CreatePopupMenu;
ContextMenu.QueryInterface(IID_IContextMenu2, ContextMenu2);
if ContextMenu2 <> nil then begin
ContextMenu2.QueryContextMenu(PopupMenu, 0, 1, $7FFF, CMF_EXPLORE);
<!--CodeE-->
제가 이쪽을 한지 오래되서 틀릴지도 모르겠는데...
ShellFolder.GetUIObjectOf에서 두번째 파라매터 PIDLCount에 폴더/파일 갯수가 들어가고 그만큼 세번째 파라매터 PIDL에 폴더/파일의 PIDL들이 들어가면 그 상황에 맞는 메뉴가 떴던걸로 기억하는데...
PIDLCount, PIDL을 먼저 한번 확인해보세요..
^^ 항상 즐코하세요...