2011-11-25 24 views
9

Tôi đang cố gắng sử dụng IFileDialog để chọn một thư mục và mã sau đây thực hiện điều này tốt. Vấn đề là tôi muốn xem một số loại tệp nhất định cũng như các thư mục trong khi duyệt (chẳng hạn như * .txt). Có một cách đơn giản để làm điều này?Làm thế nào để sử dụng IFileDialog với FOS_PICKFOLDER trong khi vẫn hiển thị tên tệp trong hộp thoại

//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(); 
    } 
} 

Trả lời

7

Khi bạn chọn tham gia FOS_PICKFOLDERS thì bạn không thể xem tệp trong hộp thoại, chỉ các thư mục. Nếu bạn bỏ qua FOS_PICKFOLDERS thì bạn không thể chọn thư mục, chỉ tệp. Hộp thoại chuẩn không hỗ trợ những gì bạn đang yêu cầu. Bạn có thể viết cho bạn hộp thoại của riêng mình nhưng tôi sẽ có khuynh hướng tìm cách sắp xếp ứng dụng của bạn để phù hợp với hành vi của hộp thoại chuẩn.

+4

Nó không thực sự về việc tổ chức các ứng dụng tốt hơn. Đó là hộp thoại tiêu chuẩn vẫn không tốt nhất cho người dùng (mặc dù nó tốt hơn nhiều so với tùy chọn trước Vista) —Tôi thấy nó khó hiểu khi tất cả các thư mục của tôi trống trong khi tôi duyệt qua, ngay cả khi mục tiêu cuối cùng của tôi xảy ra là một thư mục chứ không phải là một tệp. – Owen

+2

Trong trường hợp của tôi, tôi quan tâm đến việc thêm tập hợp các tệp và thư mục vào tệp lưu trữ. Không có khả năng lựa chọn cả hai từ một hộp thoại tiêu chuẩn duy nhất là gây phiền nhiễu. Sắp xếp lại ứng dụng xung quanh "bạn có thể thêm tệp hoặc thư mục, nhưng không phải cả hai" không có ý nghĩa. Tôi thu thập các hộp thoại tùy chỉnh là lựa chọn duy nhất. – fadden

+1

Tôi hoàn toàn không đồng ý với nó, không phải là "tổ chức một ứng dụng tốt hơn", có những trường hợp sử dụng đơn giản chỉ yêu cầu người dùng có thể chọn cả tệp và thư mục, và thực sự là một nỗi đau mà không có hộp thoại Microsoft hỗ trợ điều này :( – Erik

Các vấn đề liên quan