ATL只提供了CDialogImpl, 难到要我自己写FileDialog?

解决方案 »

  1.   

    Use windows function GetOpenFileName/GetSaveFileName
    OPENFILENAME ofn;       // common dialog box structure
    char szFile[260];       // buffer for file name
    HWND hwnd;              // owner window
    HANDLE hf;              // file handle// Initialize OPENFILENAME
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = hwnd;
    ofn.lpstrFile = szFile;
    //
    // Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
    // use the contents of szFile to initialize itself.
    //
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(szFile);
    ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;// Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) 
        hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
            0, (LPSECURITY_ATTRIBUTES) NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
            (HANDLE) NULL);// Initialize the OPENFILENAME members. 
     
    szFile[0] = '\0'; 
     
    Ofn.lStructSize = sizeof(OPENFILENAME); 
    Ofn.hwndOwner = hWnd; 
    Ofn.lpstrFilter = szFilter; 
    Ofn.lpstrFile= szFile; 
    Ofn.nMaxFile = sizeof(szFile)/ sizeof(*szFile); 
    Ofn.lpstrFileTitle = szFileTitle; 
    Ofn.nMaxFileTitle = sizeof(szFileTitle); 
    Ofn.lpstrInitialDir = (LPSTR)NULL; 
    Ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT; 
    Ofn.lpstrTitle = szTitle; 
     
    // Display the Filename common dialog box. The 
    // filename specified by the user is passed 
    // to the CreateEnhMetaFile function and used to 
    // store the metafile on disk. 
     
    GetSaveFileName(&Ofn); 
      

  2.   

    谢谢,问题已经解决. 感觉GetSaveFileName没有用SHBrowseForFolder , 后面这个函数可以直接获得路径,就是不会用,我还是用的GetSaveFileName. 呵呵