Delphi6에 있는 ShellListView를 이용해서 간단한 프로그램을 작성하는중입니다.
알고봤더니 TShellListView 아주 엉성하고 내부적인 기능구현이 전혀 안되어있거나 오동작하길래 많은 부분을 수정했습니다.
이제 ContextMenu 뜨는부분을 손보는도중
탐색기에서 폴더나 파일에서 오른쪽버튼클릭해서 나오는 메뉴가 아닌
탐색기 ListView 빈공간에서 오른쪽버튼을 클릭했을때 나오는 메뉴를 호출할 방법이 없네요.
일단 소스상에서는 파일이나 폴더에서 오른쪽버튼인경우
(ShellCtrls.pas 안의 내용입니다)
procedure InvokeContextMenu(Owner: TWinControl; AFolder: TShellFolder; X, Y: Integer);
var
....
begin
if AFolder = nil then Exit;
PIDL := AFolder.RelativeID;
AFolder.ParentShellFolder.GetUIObjectOf(Owner.Handle, 1, PIDL, IID_IContextMenu, nil, CM);
if CM = nil then Exit;
P.X := X;
P.Y := Y;
Windows.ClientToScreen(Owner.Handle, P);
Menu := CreatePopupMenu;
try
CM.QueryContextMenu(Menu, 0, 1, $7FFF, CMF_EXPLORE or CMF_CANRENAME);
CM.QueryInterface(IID_IContextMenu2, ICM2); //To handle submenus.
try
Command := TrackPopupMenu(Menu, TPM_LEFTALIGN or TPM_LEFTBUTTON or TPM_RIGHTBUTTON or
TPM_RETURNCMD, P.X, P.Y, 0, Owner.Handle, nil);
finally
ICM2 := nil;
end;
대략 이런식인데 현재 선택되어있는 폴더(또는 파일 TShellFolder)를 통해서 메뉴가 나오는듯하네요.
이런거말고 탐색기에서 빈공간오른쪽버튼메뉴는 어떻게 불러야할지 전혀 감이 안잡히네요. 이것에 관한 자료있으신분 좀 알려주심 감사하겠습니다.
---
ps.
PIDL := AFolder.RelativeID;
이부분에따라서 달라지는듯한데..
전혀모르겠네요.
왕무식한 질문 죄송합니다.