Я использую OPENFILENAME, чтобы открыть диалоговое окно просмотра в приложении win32.null завершающий символ не распознается
Я хочу, чтобы иметь возможность использовать динамический файл фильтрации в соответствии с тем, что пользователю нужно, а не предопределены ко всем файлам
ofn.lpstrFilter = L"All Files\0*.*\0\0";
Я пытался изменить стандартный код с динамическим, но, кажется, что даже нулевой завершающим символ обрабатывается как строка в коде ниже
string UserChoice = "Exe Files\0*.exe\0\0";
wstring ChoiceTemp = s2ws(UserChoice); // convert string to lpcwstr
LPCWSTR FilterByUser = ChoiceTemp.c_str();
ofn.lpstrFilter = FilterByUser;
кажется, что \ 0 не признается в качестве нулевого символа в диалоге просмотра файлов и он не показывает каких-либо файлов на всех, мои знания на C++ находится на моих первых шагах, и я не могу сделать это w ork без какой-либо помощи по этой проблеме, и я искал в сети, но ничего не пригодилось.
Любое предложение о том, как заставить его работать?
Зачем вам эти нуль-терминаторы? 'std :: string' не нуждается в них. Вы можете просто назначить ему строку, а нуль-терминатор будет добавлен автоматически – ForceBru
@Force Они требуются спецификацией API OPENFILENAME. Символы-ограничители NUL используются как разделители. Конечно, вся строка с двойным NUL завершена, поэтому вы все равно можете использовать 'std :: string', потому что она поддерживает встроенные NUL. –
Весь этот код, который у вас есть, довольно бессмыслен. Если вам нужна широкая строка, просто создайте ее: 'std :: wstring UserChoice = L" EXE Files \ 0 * .exe \ 0 "'. Обратите также внимание на то, что в строковых литералах всегда есть неявный символ терминатора NUL, поэтому двойной '\ 0 \ 0' в конце не нужен. Тогда вы просто сделаете 'ofn.lpstrFilter = UserChoice.c_str()'. –