IExplorerbrowser IFolderview2创建文件夹发布通知

时间:2016-04-08 23:34:52

标签: c++ winapi mfc windows-shell

我有一个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方法。

对此问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我终于找到了问题的答案。已经有人问过stackoverflow的另一个问题。 What is the "Shell Namespace" way to create a new folder?