2013-01-01 34 views
5

: これはこれまでのところ私のコードです: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(); 
} 

私は取得していますエラーである:
不完全クラス型へのポインタ(これはopenDlgするためのものである)

  • 識別子 "FOS_PICKFOLDERS" 許可されていない

    1. は不定であり、

    私は、Visual Studio 2010に取り組んでいる、私も長い間、このコードを探していたwin7の

  • +0

    です:

    私はこの問題に非常に効果的かつ簡単な解決策であることが、このCFileBrowserのようなクラスを見つけましたか?私はコードスニペットで見ることができません。 "FOS_PICKFOLDERS"はShObjIdl.hで定義されています。それには – stamhaney

    +0

    が含まれていることを確認してください。openDlgPtrではなくopenDlgを修正します。 #include "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から派生させるために特別なクラスを書くのではなく、フォルダブラウザを作るのが速い方法です。しかし、@HansPassantでは、100行未満でより良いソリューションを提供できます。あなたも私を助けることができます。だから共有してください – Gilad

    3

    私はそれは少し時代遅れの質問です知っているが、私は最近、同じ問題を抱えていたともシンプルで使いやすいソリューションを見つけるのに苦労。 openDlgPtr

    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

    このクラスはWindows 10では動作しません – Krapow