我学过C/c++的基础知识和实践,但我很难理解文档示例
的例子:我尝试创建命令行程序,应该让用户打开文件夹对话框并选择文件夹,因此文件夹路径应存储在变量中我做了研究,发现有很多方法可以实现这个目标,但最好的方法是使用IFileDialog::GetFolder方法(shobjidl_core.h)。文件对话框之间有什么区别?
主要问题:如何获得文件夹路径作为字符串变量基于用户选择从文件对话框?
有c++资源和实用教程吗?
我试着理解我如何使用下面的对话框:文件夹对话框
它指向我:BROWSEINFOA结构
如果有人能告诉我如何使用这个文件夹对话框或其他更好的东西,那将非常有帮助
任何优秀的windows/linux文件系统处理教程
我曾经使用wcout打印出路径
TCHAR path[260];
BROWSEINFO bi = { 0 };
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
SHGetPathFromIDList(pidl, path);
wcout << path << 'n';
我们也可以使用com接口:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow);
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr))
{
IFileOpenDialog* pFileOpen;
// Create the FileOpenDialog object.
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL,IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
// if object created ( that's com object )
if (SUCCEEDED(hr))
{
// Show the Open dialog box.
hr = pFileOpen->Show(NULL);
// Get the file name from the dialog box.
if (SUCCEEDED(hr))
{
IShellItem* pItem;
hr = pFileOpen->GetResult(&pItem);
if (SUCCEEDED(hr))
{
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
// Display the file name to the user.
if (SUCCEEDED(hr))
{
MessageBoxW(NULL, pszFilePath, L"File Path", MB_OK);
CoTaskMemFree(pszFilePath);
cout << pszFilePath;
std::string stringtoconvert;
std::wstring temp = std::wstring(stringtoconvert.begin(), stringtoconvert.end());
LPCWSTR lpcwstr = temp.c_str();
}
pItem->Release();
}
}
pFileOpen->Release();
}
CoUninitialize();
}
return 0;
}
重要提示:打开和另存为公共对话框(逗号.h)已被公共项目对话框
所取代对于linux和其他平台,有跨平台库,如Qt等,这里是UI解决方案的链接
和关于微软文档:我认为应该有更简单的例子和解释——它很复杂&用这种方式学习真令人沮丧。