我们可以访问 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);
在我的一张 属性 工作表上,我有两个 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);