【问题标题】:Can we access the icons used by the BIF_NEWDIALOGSTYLE browse window?我们可以访问 BIF_NEWDIALOGSTYLE 浏览窗口使用的图标吗?
【发布时间】:2020-09-02 11:24:28
【问题描述】:

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

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

m_BrowseLocalBackupFolder.EnableFolderBrowseButton(nullptr, BIF_NEWDIALOGSTYLE);

浏览文件夹时的弹出窗口如下所示:

我的其他控件使用我自己的类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) 浏览窗口用于 + / - 图像的图标?

【问题讨论】:

    标签: c++ mfc modal-dialog


    【解决方案1】:

    您需要使用SetWindowTheme API 更改树视图的主题:

    要将其设置为类似“Explorer”的视图,请使用以下代码:

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

    【讨论】:

    • 非常感谢。我会试试这个!
    猜你喜欢
    • 2015-03-22
    • 2010-10-03
    • 2011-10-24
    • 2022-01-16
    • 1970-01-01
    • 2011-01-31
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多