string getSavePathWithDialog() { string path = ""; HRESULT hr = CoInitializeEx(NULL, COINITBASE_MULTITHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { IFileSaveDialog *pFileSave; // Create the FileOpenDialog object. hr = CoCreateInstance(CLSID_FileSaveDialog, NULL, CLSCTX_ALL, IID_IFileSaveDialog, reinterpret_cast<void**>(&pFileSave)); if (SUCCEEDED(hr)) { // Set default extension hr = pFileSave->SetDefaultExtension(L"n3s"); if (SUCCEEDED(hr)) { // Show the Open dialog box. hr = pFileSave->Show(NULL); // Get the file name from the dialog box. if (SUCCEEDED(hr)) { IShellItem *pItem; hr = pFileSave->GetResult(&pItem); if (SUCCEEDED(hr)) { PWSTR pszFilePath; hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); // Display the file name to the user. if (SUCCEEDED(hr)) { //MessageBox(NULL, pszFilePath, L"File Path", MB_OK); char buffer[500]; wcstombs(buffer, pszFilePath, 500); path = buffer; CoTaskMemFree(pszFilePath); } pItem->Release(); } } pFileSave->Release(); } } CoUninitialize(); } return path; }
void EditorScreen::SaveMap() { HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE); if (SUCCEEDED(hr)) { IFileSaveDialog *pFileSave = NULL; HRESULT hr = CoCreateInstance(__uuidof(FileSaveDialog), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pFileSave)); if (SUCCEEDED(hr)) { hr = pFileSave->SetDefaultExtension(L"xml"); hr = pFileSave->SetFileTypes(ARRAYSIZE(c_rgSaveTypes), c_rgSaveTypes); hr = pFileSave->Show(NULL); if (SUCCEEDED(hr)) { IShellItem *pItem; hr = pFileSave->GetResult(&pItem); if (SUCCEEDED(hr)) { PWSTR pszFilePath; hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath); // Display the file name to the user. if (SUCCEEDED(hr)) { std::string filePath = utf8_encode(pszFilePath); map->SaveMap(filePath); CoTaskMemFree(pszFilePath); } pItem->Release(); } } pFileSave->Release(); } CoUninitialize(); } }
void Dlg_MemBookmark::ExportJSON() { if ( g_pCurrentGameData->GetGameID() == 0 ) { MessageBox( nullptr, _T("ROM not loaded: please load a ROM first!"), _T("Error!"), MB_OK ); return; } if ( m_vBookmarks.size() == 0) { MessageBox( nullptr, _T("No bookmarks to save: please create a bookmark before attempting to save."), _T("Error!"), MB_OK ); return; } std::string defaultDir = RA_DIR_BOOKMARKS; defaultDir.erase ( 0, 2 ); // Removes the characters (".\\") defaultDir = g_sHomeDir + defaultDir; IFileSaveDialog* pDlg = nullptr; HRESULT hr = CoCreateInstance( CLSID_FileSaveDialog, NULL, CLSCTX_ALL, IID_IFileSaveDialog, reinterpret_cast<void**>( &pDlg ) ); if ( hr == S_OK ) { hr = pDlg->SetFileTypes( ARRAYSIZE( c_rgFileTypes ), c_rgFileTypes ); if ( hr == S_OK ) { char defaultFileName[ 512 ]; sprintf_s ( defaultFileName, 512, "%s-Bookmarks.txt", std::to_string( g_pCurrentGameData->GetGameID() ).c_str() ); hr = pDlg->SetFileName( Widen( defaultFileName ).c_str() ); if ( hr == S_OK ) { PIDLIST_ABSOLUTE pidl; hr = SHParseDisplayName( Widen( defaultDir ).c_str(), NULL, &pidl, SFGAO_FOLDER, 0 ); if ( hr == S_OK ) { IShellItem* pItem = nullptr; SHCreateShellItem( NULL, NULL, pidl, &pItem ); hr = pDlg->SetDefaultFolder( pItem ); if ( hr == S_OK ) { pDlg->SetDefaultExtension( L"txt" ); hr = pDlg->Show( nullptr ); if ( hr == S_OK ) { hr = pDlg->GetResult( &pItem ); if ( hr == S_OK ) { LPWSTR pStr = nullptr; hr = pItem->GetDisplayName( SIGDN_FILESYSPATH, &pStr ); if ( hr == S_OK ) { Document doc; Document::AllocatorType& allocator = doc.GetAllocator(); doc.SetObject(); Value bookmarks( kArrayType ); for ( MemBookmark* bookmark : m_vBookmarks ) { Value item( kObjectType ); char buffer[ 256 ]; sprintf_s( buffer, Narrow( bookmark->Description() ).c_str(), sizeof( buffer ) ); Value s( buffer, allocator ); item.AddMember( "Description", s, allocator ); item.AddMember( "Address", bookmark->Address(), allocator ); item.AddMember( "Type", bookmark->Type(), allocator ); item.AddMember( "Decimal", bookmark->Decimal(), allocator ); bookmarks.PushBack( item, allocator ); } doc.AddMember( "Bookmarks", bookmarks, allocator ); _WriteBufferToFile( Narrow( pStr ), doc ); } pItem->Release(); ILFree( pidl ); } } } } } } pDlg->Release(); } }
void OnStartRecord(HWND hwnd) { IFileSaveDialog *pFileSave = NULL; IShellItem *pItem = NULL; PWSTR pszFileName = NULL; HRESULT hr = CoCreateInstance(CLSID_FileSaveDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pFileSave)); if (FAILED(hr)) { goto done; } hr = pFileSave->SetTitle(L"Select File Name"); if (FAILED(hr)) { goto done; } hr = pFileSave->SetFileName(L"MyVideo.mp4"); if (FAILED(hr)) { goto done; } hr = pFileSave->SetDefaultExtension(L"mp4"); if (FAILED(hr)) { goto done; } const COMDLG_FILTERSPEC rgSpec[] = { { L"MP4 (H.264/AAC)", L"*.mp4" }, { L"Windows Media Video", L"*.wmv" }, { L"All Files", L"*.*" }, }; hr = pFileSave->SetFileTypes(ARRAYSIZE(rgSpec), rgSpec); if (FAILED(hr)) { goto done; } hr = pFileSave->Show(hwnd); if (hr == HRESULT_FROM_WIN32(ERROR_CANCELLED)) { hr = S_OK; // The user canceled the dialog. goto done; } if (FAILED(hr)) { goto done; } hr = pFileSave->GetResult(&pItem); if (FAILED(hr)) { goto done; } hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFileName); if (FAILED(hr)) { goto done; } hr = g_pEngine->StartRecord(pszFileName); if (FAILED(hr)) { goto done; } done: CoTaskMemFree(pszFileName); SafeRelease(&pItem); SafeRelease(&pFileSave); if (FAILED(hr)) { ShowError(hwnd, IDS_ERR_RECORD, hr); } UpdateUI(hwnd); }