Мне кажется, ответ на ваш вопрос находится внутри кода
CMFCPropertyGridFileProperty::OnClickButton(CPoint /*point*/)
из
<Your Visual Studio installation folder>\VC\atlmfc\src\mfc\afxpropertygridctrl.cpp
файл.
Если у вас нет доступа к коду, я опубликую его важную часть:
CString strPath = m_varValue.bstrVal;
BOOL bUpdate = FALSE;
if (m_bIsFolder)
{
if (afxShellManager == NULL)
{
CWinAppEx* pApp = DYNAMIC_DOWNCAST(CWinAppEx, AfxGetApp());
if (pApp != NULL)
{
pApp->InitShellManager();
}
}
if (afxShellManager == NULL)
{
ASSERT(FALSE);
}
else
{
bUpdate = afxShellManager->BrowseForFolder(strPath, m_pWndList, strPath);
}
}
else
{
CFileDialog dlg(m_bOpenFileDialog, m_strDefExt, strPath, m_dwFileOpenFlags, m_strFilter, m_pWndList);
if (dlg.DoModal() == IDOK)
{
bUpdate = TRUE;
strPath = dlg.GetPathName();
}
}
Как видите, сама Microsoft не использует класс Cfiledialog, когда хочет открыть диалоговое окно для выбора папок.
Для использования подобного кода ваш класс приложения ДОЛЖЕН быть получен из CWinAppEx, а не CWinApp