我有一个MFC应用程序,它使用IExplorerBrowser接口在我的应用程序中实现windows shell。在这个应用程序中,我有一个按钮,用户可以在资源管理器的shell视图中单击并创建一个文件夹。创建文件夹后,应用程序应允许用户重命名该文件夹。换句话说,我希望它的工作方式与用户在Windows资源管理器中创建文件夹的方式完全相同。我使用了IFileOperations接口的NewItem方法来创建文件夹。这是我在应用程序中创建文件夹的确切代码
HRESULT CreateFolder( __in IShellItem *pDestinationFolder, PCWSTR pszNewName )
{
HRESULT hr = CoInitializeEx( NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE );
if ( SUCCEEDED( hr ) )
{
CComPtr<IFileOperation> pFileOperation;
hr = CoCreateInstance( CLSID_FileOperation,
NULL,
CLSCTX_ALL,
IID_PPV_ARGS( &pFileOperation ) );
if ( SUCCEEDED( hr ) )
{
hr = pFileOperation->SetOperationFlags( FOF_NO_UI );
if ( SUCCEEDED( hr ) )
{
hr = pFileOperation->NewItem( pDestinationFolder, FILE_ATTRIBUTE_DIRECTORY, pszNewName, NULL, NULL );
if ( SUCCEEDED( hr ) )
{
hr = pFileOperation->PerformOperations();
}
}
}
}
CoUninitialize();
return hr;
}
在调用CreateFolder(...)之后,我使用IFolderView2接口的SelectItem方法将文件夹置于选择模式。以下是将文件夹置于编辑模式的代码:
HRESULT hr = m_pIExplorerBrowser->GetCurrentView( IID_PPV_ARGS( pFolderView2 ) );
if( SUCCEEDED( hr ) )
pFolderView2->SelectItem( nLastCreatedFolderIndex, SVSI_EDIT );
问题是CreateFolder比我的SelectItem方法调用晚完成。我一直在寻找一个事件,告诉我什么时候CreateFolder更新了视图,以便我可以在那之后发送我的SelectItem方法。
对此问题的任何帮助将不胜感激。
答案 0 :(得分:0)
我终于找到了问题的答案。已经有人问过stackoverflow的另一个问题。 What is the "Shell Namespace" way to create a new folder?