如何获得SaveDialogBox组合框值

时间:2012-09-26 20:54:29

标签: c++ file winapi

如果用户没有这样做并且连接文件名和extension-combobox-string,我想设置文件的扩展名。有一些简单的方法可以这样做,或者我需要一些“钩子”?

    OPENFILENAME ofn;       // common dialog box structure
    TCHAR szFile[260];       // buffer for file name                      
    HANDLE hFile;              // 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 = _T("Текстові файли(*.txt)\0*.txt\0Word(*.doc)\0*.doc\0");
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_EXPLORER;   

    if(GetSaveFileName(&ofn) == TRUE)
    {
        hFile = CreateFile( szFile,
            GENERIC_WRITE,
            0,
            (LPSECURITY_ATTRIBUTES)NULL,
            CREATE_NEW,
            FILE_ATTRIBUTE_NORMAL,
            (HANDLE)NULL);

        int editLen = Edit_GetTextLength(edit);
        TCHAR* buffer = new TCHAR[editLen+1];
        DWORD wroteLen = 0;

        Edit_GetText(edit,buffer,editLen+1);
        //Set extension if need

        ///////////////////////
        if(!WriteFile(hFile,buffer,editLen*sizeof(TCHAR),&wroteLen,NULL))
            MessageBox(hwnd,_T("File wasn`t saved.."),_T("Error"),MB_ICONERROR);

        CloseHandle(hFile);
        delete[]buffer;

感谢您的回复! ))

2 个答案:

答案 0 :(得分:2)

您想要设置lpstrDefExt成员:

来自MSDN

  

类型:LPCTSTR

     

默认扩展名。

     

GetOpenFileName和   如果用户,GetSaveFileName会将此扩展名附加到文件名   无法输入扩展名。此字符串可以是任何长度,但仅限   附加前三个字符。该字符串不应包含   一段时间 (。)。如果此成员为NULL并且用户无法键入   扩展名,不附加扩展名。

答案 1 :(得分:2)

ofn.nFilterIndex设置为文件扩展名组合框选择的从1开始的索引。