urenai 发表于 2024-2-27 02:12:39

修复 浏览文件夹() @飞扬工作室 直接替换官方库方法。

直接替换官方库方法。
支持第三个参数,可空。用于设置初始目录。
话说windows浏览文件夹这块真丑。
<火山程序 类型 = "通常" 版本 = 1 />

方法 浏览文件夹 <公开 类型 = 文本型 注释 = "打开一个对话框,浏览系统中存在的所有文件夹,返回被选定" 注释 = "文件夹的路径名,如果未选中任何文件夹,则返回空文本."
      注释 = "仅用作本对象的实际类型为\"窗口\"或\"MDI主窗口\"的情况." 折叠 折叠2>
参数 标题 <类型 = 文本型 注释 = "提供显示在对话框上部的标题文本">
参数 是否包含文件 <类型 = 逻辑型 注释 = "指定是否在浏览框中同时列出文件名" @默认值 = 假>
参数 初始目录 <类型 = 文本型 @默认值 = 空对象>
{
    变量 结果变量 <类型 = 文本型>
    @ BROWSEINFO inf;
    @ ZERO_MEM (&inf, sizeof (inf));
    @ inf.hwndOwner = GetMfcWndHandle ();
    @ if (!@<初始目录>.IsNullObject ()){inf.pidlRoot = ILCreateFromPath(@<初始目录>.GetText ()); }
    @ TCHAR path ;
    @ path = '\0';
    @ inf.pszDisplayName = path;
    @ inf.lpszTitle = @<标题>.GetText ();
    @ inf.ulFlags = BIF_EDITBOX;
    @ if (@<是否包含文件>)
    @   inf.ulFlags |= BIF_BROWSEINCLUDEFILES;
    @ LPITEMIDLIST pItem = SHBrowseForFolder (&inf);
    @ if (pItem != NULL)
    @ {
    @   path = '\0';
    @   if (SHGetPathFromIDList (pItem, path))
    @         @<结果变量>.SetText (path);
    @   IMalloc* pMalloc;
    @   if (SUCCEEDED (SHGetMalloc (&pMalloc)))
    @   {
    @         pMalloc->Free (pItem);
    @         pMalloc->Release ();
    @   }
    @ }
    返回 (结果变量)
}


火绒 发表于 2024-2-27 08:38:22

必须点赞。。。。

承易 发表于 2024-2-27 10:42:53

添砖加瓦 众人拾柴火焰高 让火山越来越火 越强大
页: [1]
查看完整版本: 修复 浏览文件夹() @飞扬工作室 直接替换官方库方法。