2013-01-01 9 views
5

मैं रूप में अच्छी तरह एक साधारण MFC फ़ोल्डर ब्राउज़र बना सकते हैं और MSDN में जवाब के लिए देखने के लिए कोशिश कर रहा हूँ और यहाँ: यह मेरा कोड अब तक है:MFC फ़ोल्डर ब्राउज़र IFileOpenDialog

void CAddFilterDlg::OnBnClickedAddDll() 
{ 
    CFileDialog dlg(TRUE/*bOpenFileDialog*/, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT , NULL, NULL, 0, TRUE/*bVistaStyle*/); 
    CString folderPath = dlg.GetFolderPath(); 
    IFileOpenDialog * openDlg = dlg.GetIFileOpenDialog(); 
    if (openDlg != NULL) 
    { 
     openDlg->SetOptions(FOS_PICKFOLDERS); 
     openDlg->Release(); 
    } 

dlg.DoModal(); 
} 

त्रुटियों मैं हो रही है कर रहे हैं:

  1. अधूरा वर्ग प्रकार के सूचक अनुमति नहीं है (इस openDlg के लिए है)
  2. पहचानकर्ता "FOS_PICKFOLDERS" अपरिभाषित है

मैं दृश्य स्टूडियो 2010, Win7

+0

openDlgPtr कहां है:

मैं इस समस्या का एक बहुत प्रभावी और सरल समाधान होने के लिए इस CFileBrowser की तरह वर्ग पाया? मैं कोड स्निपेट में नहीं देख सकता। "FOS_PICKFOLDERS" को ShObjIdl.h में परिभाषित किया गया है, सुनिश्चित करें कि आपने इसमें – stamhaney

+0

शामिल किया है, मैं openDlgPtr के बजाय उस माफी openDlg को ठीक कर दूंगा। मैंने # शामिल "ShObjIdl.h" को अभी भी पहचाना नहीं है –

+1

आप लक्ष्य विंडो संस्करण (_WIN32_WINNT) मैक्रो ठीक से सेट नहीं कर रहे हैं। IFileOpenDialog केवल 0x600 और ऊपर में उपलब्ध है। –

उत्तर

7

मैं भी एक लंबे समय के लिए इस कोड के लिए देख रहा था पर काम कर रहा हूँ, मैं एक मंच में इस मिल गया है।

void CAddFilterDlg::OnBnClickedAddDll() 
{ 
BROWSEINFO bi = {0}; 
bi.lpszTitle = _T("Select Folder"); 
LPITEMIDLIST pidl = SHBrowseForFolder (&bi); 
if (pidl != 0) 
{ 
    // get the name of the folder 
    TCHAR path[MAX_PATH]; 
    SHGetPathFromIDList (pidl, path); 

    // free memory used 
    IMalloc * imalloc = 0; 
    if (SUCCEEDED(SHGetMalloc (&imalloc))) 
    { 
     imalloc->Free (pidl); 
     imalloc->Release(); 
    } 
} 

} 
+0

यह एक पूरी तरह से अलग संवाद है। एक बहुत व्यापक रूप से तुच्छ एक। –

+1

अंत में SHBrowseForFolder से प्राप्त करने के लिए एक विशेष क्लास इन-ऑर्डर लिखने के बजाय फ़ोल्डर ब्राउज़र बनाने का एक तेज़ तरीका है। हालांकि @ हंसपैसेंट यदि आप 100 से कम लाइनों में बेहतर समाधान दे सकते हैं। आप भी मेरी मदद कर सकते हैं। तो कृपया – Gilad

3

मैं जानता हूँ कि यह थोड़ा पुराना सवाल है, लेकिन मैं हाल ही में एक ही समस्या थी और यह भी एक सरल और आसान से उपयोग समाधान खोजने के लिए संघर्ष किया।

CFolderPickerDialog FolderSelectDialog(theApp.xAM->GetExportPath().c_str(),NULL,this); 

if (FolderSelectDialog.DoModal() == IDOK) 
{ 
    CString cBuff = FolderSelectDialog.GetPathName(); 

    std::wstring wsPath = std::wstring(cBuff); 

    theApp.xAM->SetExportPath(wsPath); 

    CEditExportFolderPath.SetWindowTextW(cBuff); 
} 
+0

साझा करें यह कक्षा विंडोज 10 के तहत काम नहीं करती है – Krapow

संबंधित मुद्दे