CMF_CANRENAME
으로 IContextMenu::QueryContextMenu
을 호출 중이며 Windows XP에서 IContextMenu::InvokeCommand
을 호출 할 때 이름 변경 작업을 처리하는 데 문제가 있습니다.IContextMenu를 호출 할 때 이름 변경 작업을 어떻게 처리합니까?
저는 네임 스페이스 확장이 아니며 DefView/IShellView를 사용하고 있지 않지만 IServiceProvider
을 구현하는 사이트를 제공하고 있습니다.
최신 버전의 Windows에서 IFolderView2를 구현하는 서비스에 대해 쿼리되었으므로 셸에서 IFolderView2::DoRename
을 호출하고 이름 바꾸기 작업을 시작할 수 있습니다.
그러나 Windows XP에서는 SID_DefView
서비스를 쿼리하지만 해당 서비스를 구현하는 방법에 대한 정보를 찾을 수 없습니다.
인터페이스 그것 (shell32를! CDefFolderMenu :: _ ProcessRename) 요구된다 {985F64F0-D410-4E02-BE22-DA07F2B5C5E1} 내가이 IDefViewFrame3
의 IID입니다 레지스트리에서 볼 수 있지만, 문서화되지 않은 것 같다 ! 반면 IDefViewFrame은 문서화되어 있지만 MSDN에서 말하는 것은 "IUnknown 기능에만 사용되며 자체적 인 방법은 없습니다."입니다.
이 상황에서 XP에서 이름 바꾸기 작업을 처리하는 방법이 있습니까?
IDefViewFrame3 인터페이스를 위조하고 싶지 않지만 내가 생각할 수있는 유일한 다른 옵션은 이름 바꾸기 동사인지 확인하고 TrackPopupMenu
이후에 직접 처리하는 것입니다. 모든 제 3 자 네임 스페이스 확장을 올바르게 처리 할 것을
STDMETHOD(GetWindowLV)(THIS_ HWND*phwnd) PURE;
STDMETHOD(ShowHideListView)(THIS) PURE;
STDMETHOD(OnResizeListView)(THIS) PURE;
STDMETHOD(ReleaseWindowLV)(THIS) PURE;
STDMETHOD(DoRename)(THIS) PURE;
및 DoRename
이 InvokeCommand
내부 DefView에 의해 호출되지만 너무 모호하고 문서화 이후는 않을 :
실제로 XP를 지원해야하는지 여부를 고려하십시오. –
질문을 올바르게 읽는 경우 코드의 다른 부분이 코드 이름을 바꾸어 이름을 지정하도록 요청하고 내부적으로 실제 컨텍스트 메뉴를 사용하여 실제 이름을 바꿉니다. 그게 맞습니까? 초기 이름 변경 요청을 받기 위해'IDefViewFrame3'을 구현하는 방법을 묻고 있습니까? –
실제 이름 바꾸기에는'TrackPopupMenu()'가 필요하지 않습니다. 'QueryContextMenu()'를 사용하면 메뉴 항목으로'HMENU'를 채우고,'Rename' 메뉴 항목을 찾아 ID를'InvokeCommand()'에 넘겨 줄 것입니다. 또는'QueryContextMenu()'를 건너 뛰고 하드 코딩 된 "이름 바꾸기"동사를'InvokeCommand()'에 전달하십시오. –