WAV ファイルを開くメッセージを WIN32 API に送信しようとしています。LPARAM パラメータを L"C:/path/file.wav" に設定することでこれを行うことができます。ただし、ダイアログボックスを使用してファイルパスへの文字列を生成しようとしています。OpenFileDialog 関数は、選択したファイル パスを LPSTR データ型として返すことができます。ただし、このファイル パスは Windows ファイル パスとして認識されるため、バックスラッシュで構成されます。これらのバックスラッシュはエスケープされたり、スラッシュに置き換えられたりしないため、コンパイラは、形成されたユニバーサル文字名が正しくないために泣き始めます。そのため、LPSTR ファイルパスのすべての \ を \ または / に置き換えるのは簡単に思えます。私はいくつかの方法でこれをやろうとしてきましたが、何もうまくいかないようです。
wchar_t* SelectAudioFile(HWND windowHandle) {
OPENFILENAME ofn; // common dialog box structure
char szFile[260]; // buffer for file name
// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = windowHandle;
ofn.lpstrFile = (LPWSTR)szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = L"Waveform Audio File Format (*.wav)\0*.wav\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
// Display the Open dialog box.
if (GetOpenFileName(&ofn)==TRUE) {
CreateFile(ofn.lpstrFile,
GENERIC_READ,
0,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
MessageBox(windowHandle,ofn.lpstrFile,0,0);
}
//Here the backslash should be escaped or replaced.
const wchar_t * currentPath = ofn.lpstrFile; //This is a LPSTR
wchar_t * newPath;
int filePathLength = sizeof(currentPath);
for (int i=0; i < filePathLength; i++) {
if (currentPath[i] == "\\") {
newPath[i] = "\\\\";
} else {
newPath[i] = filePath[i];
}
}
return newPath;
}
次の行は、パスにある特定のファイルを開くように指示するメッセージを投稿します。
PostMessageW(hwnd, WMA_OPEN, 0, (LPARAM)SelectAudioFile(hwnd));
したがって、LPARAM を静的ファイルパスに置き換えるとうまくいきます!
ファイルパスのバックスラッシュを置き換えるにはどうすればよいですか?
100万回ありがとう!