2011-11-25 6 views
9

Estoy tratando de usar IFileDialog para seleccionar una carpeta y el siguiente código lo hace bien. El problema es que me gustaría ver ciertos tipos de archivos y carpetas mientras navego (como * .txt). ¿Hay una manera simple de hacer esto?Cómo usar IFileDialog con FOS_PICKFOLDER mientras todavía se muestran los nombres de los archivos en el cuadro de diálogo

//g_path is a global which will contain the selected folders path 
void PickContainer() 
{ 
    IFileDialog *pfd; 
    if (SUCCEEDED(CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd)))) 
    { 
     DWORD dwOptions; 
     if (SUCCEEDED(pfd->GetOptions(&dwOptions))) 
     { 
      pfd->SetOptions(dwOptions | FOS_PICKFOLDERS); 
     } 
     if (SUCCEEDED(pfd->Show(NULL))) 
     { 
      IShellItem *psi; 
      if (SUCCEEDED(pfd->GetResult(&psi))) 
      { 
       if(!SUCCEEDED(psi->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, &g_path))) 
       { 
        MessageBox(NULL, "GetIDListName() failed", NULL, NULL); 
       } 
       psi->Release(); 
      } 
     } 
     pfd->Release(); 
    } 
} 

Respuesta

7

Una vez que se opta por FOS_PICKFOLDERS entonces usted no puede ver los archivos en el cuadro de diálogo, sólo las carpetas. Si omite FOS_PICKFOLDERS, no puede seleccionar carpetas, solo archivos. El diálogo estándar no admite lo que estás preguntando. Podrías escribir tu propio diálogo pero me inclinaría a encontrar una manera de organizar tu aplicación para que se ajuste al comportamiento del diálogo estándar.

+4

No es realmente acerca de la organización de la aplicación mejor. Es que el diálogo estándar todavía no es el mejor para los usuarios (aunque es muchísimo mejor que la opción previa a la Vista). Me resulta confuso que parezca que todas mis carpetas están vacías mientras estoy navegando, incluso si mi objetivo final es una carpeta en lugar de un archivo. – Owen

+2

En mi caso, estoy interesado en agregar una colección de archivos y carpetas a un archivo de archivo. La inhabilidad de seleccionar ambos desde un único diálogo estándar es molesto. Reorganizar la aplicación en torno a "puede agregar archivos o carpetas, pero no ambos" no tiene sentido. Creo que los diálogos personalizados son la única opción. – fadden

+1

Estoy totalmente de acuerdo con fadden, no se trata de "organizar una aplicación mejor", hay casos de uso que simplemente requieren que el usuario pueda seleccionar tanto archivos como carpetas, y realmente es una pena que no haya un diálogo de Microsoft que los respalde. esta :( – Erik

Cuestiones relacionadas