さて、私はこれに 2 日間対処してきましたが、解決策が見つかりません。
問題: Winapi を使用してファイル選択ダイアログにフィルターを設定しようとしています。GetOpenFileName
これを行うために関数を使用しています。この関数は、構造体を使用して、ファイル拡張子フィルターなどのオプションを設定します。呼び出されるこの構造体のメンバーにlpstrFilter
は、特定の文字列形式が必要です。Winapi が示すとおりにその文字列を設定していますが、何らかの理由でこの文字列の値が変更されます。
私はこのstatic const char *を持っています:
//This contains string "JPG"
static const char * extensionFilter = v->trabajo10.C_JMV_SelectFile_FileExtension7.GetString();
//This forms a filter string which applies to OPENFILENAME structure.
string sFilter;
sFilter.append("Format: ");
sFilter.append(extensionFilter);
sFilter.push_back('\0');
sFilter.append("*.");
sFilter.append(extensionFilter);
sFilter.push_back('\0');
const char * filter = sFilter.c_str();
ofn.lpstrFilter = filter; //This sets: --> Format: JPG\0*.JPG\0
//This opens the file selection dialog
if (GetOpenFileName(&ofn)==TRUE){
...
ファイル選択ダイアログは、次のように正しく表示されます。
ジョークが来ました。コードを次のように変更します。
//This contains string "JPG"
static const char * extensionFilter = v->trabajo10.C_JMV_SelectFile_FileExtension7.GetString();
if(1){
//This forms a filter string which applies to OPENFILENAME structure.
string sFilter;
sFilter.append("Format: ");
sFilter.append(extensionFilter);
sFilter.push_back('\0');
sFilter.append("*.");
sFilter.append(extensionFilter);
sFilter.push_back('\0');
const char * filter = sFilter.c_str();
ofn.lpstrFilter = filter; //This sets: --> Format: JPG\0*.JPG\0
}
//This opens the file selection dialog
if (GetOpenFileName(&ofn)==TRUE){
...
そして、これが結果です。問題:
フィルター文字列が変更されました???