Я пытаюсь применить фильтры расширения файла к диалоговому окну выбора файла.
Так работает:
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";
Но когда я назначаю фильтры расширения динамически, через параметры, это не удается, фильтры не отображаются в поле со списком:
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();
Я предполагаю, что проблема в преобразовании строк, но не могу понять.
'\0'
может навредитьstringstream
. Если да, как насчет использования другого символа, такого как$
, в качестве разделителя, и после завершения построения фильтра скопировать строку в массивchar
и преобразовать$
s в'\0'
? - person MikeCAT   schedule 04.12.2015ffilter
в отладчике, чтобы узнать, что он содержит? - person Mark Ransom   schedule 04.12.2015