我们可以访问 BIF_NEWDIALOGSTYLE 浏览器 window 使用的图标吗?

Can we access the icons used by the BIF_NEWDIALOGSTYLE browse window?

在我的一张 属性 工作表上,我有两个 CMFCEditBrowseCtrl 对象。

其中之一是选择计算机上的本地文件夹。所以我在 OnInitDialog 中使用了以下样式:

m_BrowseLocalBackupFolder.EnableFolderBrowseButton(nullptr, BIF_NEWDIALOGSTYLE);

浏览文件夹时弹出 window 如下所示:

我的其他控件使用我自己的 class CRemoteFTPFolderSelect,它派生自 CMFCEditBrowseCtrl。这是因为我需要通过 FTP 显示远程文件夹列表。我通过我的 C# DLL 包装器使用 FluentFTP 来实现这一点。我的 OnBrowse 方法:

void CRemoteFTPFolderSelect::OnBrowse()
{
    if (theApp.MSAToolsInterface().ConnectToFTP(m_strHostname, m_strUsername, m_strPassword))
    {
        CBrowseFolderFTP dlgBrowse(this);
        CString strRemoteBackupFolder;

        GetWindowText(strRemoteBackupFolder);

        if (strRemoteBackupFolder != _T(""))
            dlgBrowse.SetSelectedFolder(strRemoteBackupFolder);

        if (dlgBrowse.DoModal() == IDOK)
        {
            dlgBrowse.GetSelectedFolder(strRemoteBackupFolder);
            SetWindowText(strRemoteBackupFolder);

            CMFCPropertyPage* pParent = (CMFCPropertyPage*)GetParent();
            if (pParent)
            {
                CWnd* pWnd = pParent->GetDlgItem(IDC_BUTTON_APPLY);
                if (pWnd != nullptr)
                    pWnd->EnableWindow(TRUE);
            }
        }

        theApp.MSAToolsInterface().DisconnectFromFTP();
    }
}

我不得不使用自己的对话框资源,目前它看起来像这样:

目前我正在创建这样的图像列表:

SHGetFileInfo( 
    _T("Doesn't matter"), 
    FILE_ATTRIBUTE_DIRECTORY, 
    &sfi, sizeof sfi, 
    SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); 
m_imgList.Add(sfi.hIcon);

SHGetFileInfo( 
    _T("Doesn't matter"), 
    FILE_ATTRIBUTE_DIRECTORY, 
    &sfi, sizeof sfi, 
    SHGFI_ICON | SHGFI_OPENICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); 
m_imgList.Add(sfi.hIcon);

m_treeFTP.SetImageList(&m_imgList, TVSIL_NORMAL );

是否可以获得与 m_BrowseLocalBackupFolder.EnableFolderBrowseButton(nullptr, BIF_NEWDIALOGSTYLE) 浏览 window + / - 图片所用图标相似的图标?

您需要使用 SetWindowTheme API:

更改树视图的主题

为了像视图一样将其设置为"Explorer",请使用此代码:

SetWindowTheme(hwndTreeView, L"Explorer", NULL);