Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我们可以访问BIF_NEWDIALOGSTYLE浏览窗口使用的图标吗?_C++_Mfc_Modal Dialog - Fatal编程技术网

C++ 我们可以访问BIF_NEWDIALOGSTYLE浏览窗口使用的图标吗?

C++ 我们可以访问BIF_NEWDIALOGSTYLE浏览窗口使用的图标吗?,c++,mfc,modal-dialog,C++,Mfc,Modal Dialog,在我的一个属性页上,我有两个CMFCEditBrowseCtrl对象 其中一个用于选择计算机上的本地文件夹。因此,我在OnInitDialog中使用了以下样式: m_BrowseLocalBackupFolder.EnableFolderBrowseButton(nullptr, BIF_NEWDIALOGSTYLE); 浏览文件夹时弹出的窗口如下所示: SHGetFileInfo( _T("Doesn't matter"), FILE_ATTRIBUTE_DIRECTOR

在我的一个属性页上,我有两个
CMFCEditBrowseCtrl
对象

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

m_BrowseLocalBackupFolder.EnableFolderBrowseButton(nullptr, BIF_NEWDIALOGSTYLE);
浏览文件夹时弹出的窗口如下所示:

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 );

我的另一个控件使用我自己的类
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 );

目前,我正在创建如下图像列表:

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)浏览+/-图像的窗口?

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

要将其设置为类似“资源管理器”的视图,请使用以下代码:

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

非常感谢你。我要试试这个!