Advertisement
ohusq

dialog c++

May 1st, 2024
24
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. // opens idlaog
  2.  
  3. std::wstring openFileDialog() {
  4. std::wstring selectedFilePath;
  5.  
  6. // Initialize COM library
  7. HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
  8. if (FAILED(hr)) {
  9. return selectedFilePath; // Return empty string if COM initialization fails
  10. }
  11.  
  12. // Initialize COM object
  13. IFileOpenDialog* pFileOpen;
  14. hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileOpenDialog, reinterpret_cast<void**>(&pFileOpen));
  15. if (FAILED(hr)) {
  16. CoUninitialize(); // Uninitialize COM before returning
  17. return selectedFilePath; // Return empty string if object creation fails
  18. }
  19.  
  20. // Configure dialog to allow multiple file selection
  21. DWORD dwOptions;
  22. hr = pFileOpen->GetOptions(&dwOptions);
  23. if (SUCCEEDED(hr)) {
  24. hr = pFileOpen->SetOptions(dwOptions | FOS_ALLOWMULTISELECT);
  25. }
  26.  
  27. // Show the file dialog
  28. hr = pFileOpen->Show(NULL);
  29. if (SUCCEEDED(hr)) {
  30. // Get the selected files
  31. IShellItemArray* pItems;
  32. hr = pFileOpen->GetResults(&pItems);
  33. if (SUCCEEDED(hr)) {
  34. DWORD dwNumItems;
  35. hr = pItems->GetCount(&dwNumItems);
  36. if (SUCCEEDED(hr)) {
  37. for (DWORD i = 0; i < dwNumItems; ++i) {
  38. IShellItem* pItem;
  39. hr = pItems->GetItemAt(i, &pItem);
  40. if (SUCCEEDED(hr)) {
  41. PWSTR pszFilePath;
  42. hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
  43. if (SUCCEEDED(hr)) {
  44. // Use pszFilePath as the selected file path
  45. selectedFilePath = pszFilePath;
  46. CoTaskMemFree(pszFilePath);
  47. }
  48. pItem->Release();
  49. }
  50. }
  51. }
  52. pItems->Release();
  53. }
  54. }
  55.  
  56. pFileOpen->Release();
  57.  
  58. // Unload COM
  59. CoUninitialize();
  60.  
  61. return selectedFilePath;
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement