У меня есть всплывающее окно SHBrowseForFolder, которое работает нормально, но я хотел бы установить заголовок. Я знаю, что это должен быть wchar_t*, и когда я использую константу типа (wchar_t*)L"My Title", заголовок отображается правильно.
Но если я попытаюсь использовать строковое значение, я получу только первую букву «M», это похоже на то, что широкая строка была снова преобразована в новую широкую строку, заполняя каждый символ нулем.
Winapi::Shlobj::BROWSEINFO bi = {0};
bi.hwndOwner = Handle;
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_BROWSEFORCOMPUTER;
bi.lpszTitle = String("My Title").w_str(); // This only shows the 'M'
//bi.lpszTitle = (wchar_t*)"My Title"; // This shows the full string 'My Title'
LPITEMIDLIST pidl = SHBrowseForFolder((_browseinfoA*)&bi);
if ( pidl != 0 ) {
// free memory used
IMalloc *imalloc = 0;
if (SUCCEEDED(SHGetMalloc(&imalloc))) {
imalloc->Free(pidl);
imalloc->Release();
}
}
Документация для UnicodeString всех функций преобразования c_str()
,t_str()
и w_str()
возвращает wchar_t*
, но в объявлении указано WideChar*
.
Есть идеи, как заставить этот код работать вместе со строкой?