gpt4 book ai didi

c++ - "Shell Namespace"新建文件夹的方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 09:57:04 25 4
gpt4 key购买 nike

显然,这对于 win32 api - CreateDirectory() 来说是微不足道的。但我正在尝试托管一个 IShellView,并希望以最面向 shell 的方式执行此操作。我本以为会有一个 createobject 或 createfolder 或来自 IShellFolder 的类似内容。但是 IShellView 和 IShellFolder 甚至 IFolderView 似乎都没有这样的东西。

有没有shell编程的方法来创建一个新的文件夹?还是我需要使用路径名创建文件夹(老式的方式)?

如果我必须通过 CreateDirectory() 来完成,那么我的下一个问题可能是:关于如何让 IShellView/IFolderView 实际看到这个新对象并将其显示给用户的任何想法?

动机:创建我自己的文件对话框替代品,我想提供标准 XP 样式文件对话框的“新文件夹”工具栏图标功能。

编辑:我继续使用 CreateDirectory 创建了一些基本有效的东西。但是,我仍然希望有更好的方法来做到这一点,但这样您就可以看到它是如何工作的,并提供更好的想法来更好地解决这个问题:

    PidlUtils::Pidl pidl(m_folder);
CFilename folderName(GetDisplayNameOf(pidl), "New Folder");
for (int i = 2; folderName.Exists(); ++i)
folderName.SetFullName(FString("New Folder (%d)", i));
if (!CPathname::Create(folderName, false))
throw CContextException("Unable to create a new folder here: ");

// get the PIDL for the newly created folder
PidlUtils::Pidl pidlNew;
#ifdef UNICODE
const wchar_t * wszName = folderName.c_str();
#else
wchar_t wszName[MAX_PATH];
MultiByteToWideChar(CP_ACP, 0, folderName.GetFullName(), -1, wszName, MAX_PATH);
#endif
m_hresult = m_folder->ParseDisplayName(NULL, NULL, wszName, NULL, pidlNew, NULL);
if (FAILED(m_hresult))
throw CLabeledException(FString("Unable to get the PIDL for the new folder: 0x%X", m_hresult));

// upgrade our interface so we can select & rename it
CComQIPtr<IShellView2> sv2(m_shell_view);
if (!sv2)
throw CLabeledException("Unable to obtain the IShellView2 we need to rename the newly created folder.");

// force it to see thew new folder
sv2->Refresh();

// select the new folder, and begin the rename process
m_hresult = sv2->SelectAndPositionItem(pidlNew, SVSI_EDIT|SVSI_DESELECTOTHERS|SVSI_ENSUREVISIBLE|SVSI_POSITIONITEM, NULL);
if (FAILED(m_hresult))
throw CLabeledException(FString("Unable to select and position the new folder item: 0x%X", m_hresult));

最佳答案

是的,你可以get IContextMenu并寻找子菜单,但为什么要打扰,只需调用 SHChangeNotify在调用 CreateDirectory 之后

关于c++ - "Shell Namespace"新建文件夹的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1773381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com