c++functionwinapistdgetopenfilename

Winapi GetOpenFileName Extension Filter not working


I'm trying to apply file's extension filters to the file's selection dialog.

This way works:

ofn.lpstrFilter =   
"(*.exe) Windows Executable\0*.exe\0"
"(*.ini) Windows Initialization file \0*.ini\0"
"(*.dll) Dynamic Link Library \0*.dll\0"
"(*.lib) Windows Library file \0*.lib\0"
"(*.conf) Windows Configuration file \0*.conf\0";

enter image description here

But when I'm assigning extension filters dynamically, via parameters, it fails, filters don't appear in the combo box:

LPCSTR filter = (LPCSTR)extFilter; //Contains string "bmp"

stringstream s;
s << "(*.exe) Windows Executable\0" << "*." << filter << "\0";
string ffilter = s.str();
ofn.lpstrFilter = ffilter.c_str();

enter image description here

I'm assuming the problem is in strings conversion, but can't figure it out.


Solution

  • Finally found an answer:

    const char * extensionFilter = myParamVar; //Contains "JPG" string
    
    string sFilter;
    sFilter.append("Format: ");
    sFilter.append(extensionFilter);
    sFilter.push_back('\0');
    sFilter.append("*.");
    sFilter.append(extensionFilter);
    sFilter.push_back('\0');
    
    //Current filter content --> Format: JPG\0*.JPG\0
    
    const char * filter = sFilter.c_str(); //Char string conversion
    ofn.lpstrFilter = filter; //Set the filter to the sctructure's member.
    
    //Opens the dialog and it successfully applies the filter.
    if (GetOpenFileName(&ofn)==TRUE){
    . . .