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);
非常感谢你。我要试试这个!