void CPPageMisc::OnExportKeys() { if (GetParent()->GetDlgItem(ID_APPLY_NOW)->IsWindowEnabled()) { int ret = MessageBox(ResStr(IDS_EXPORT_SETTINGS_WARNING), ResStr(IDS_EXPORT_SETTINGS), MB_ICONEXCLAMATION | MB_YESNOCANCEL); if (ret == IDCANCEL) { return; } else if (ret == IDYES) { GetParent()->PostMessage(PSM_APPLY); } } CFileDialog fileSaveDialog(FALSE, _T("reg"), _T("mpc-hc-keys.reg")); if (fileSaveDialog.DoModal() == IDOK) { if (AfxGetMyApp()->ExportSettings(fileSaveDialog.GetPathName(), _T("Commands2"))) { MessageBox(ResStr(IDS_EXPORT_SETTINGS_SUCCESS), ResStr(IDS_EXPORT_SETTINGS), MB_ICONINFORMATION | MB_OK); } else { if (GetLastError() == ERROR_FILE_NOT_FOUND) { MessageBox(ResStr(IDS_EXPORT_SETTINGS_NO_KEYS), ResStr(IDS_EXPORT_SETTINGS), MB_ICONINFORMATION | MB_OK); } else { MessageBox(ResStr(IDS_EXPORT_SETTINGS_FAILED), ResStr(IDS_EXPORT_SETTINGS), MB_ICONERROR | MB_OK); } } } }
void CPPageMisc::OnExportSettings() { if (GetParent()->GetDlgItem(ID_APPLY_NOW)->IsWindowEnabled()) { int ret = MessageBox(ResStr(IDS_EXPORT_SETTINGS_WARNING), ResStr(IDS_EXPORT_SETTINGS), MB_ICONEXCLAMATION | MB_YESNOCANCEL); if (ret == IDCANCEL) { return; } else if (ret == IDYES) { GetParent()->PostMessage(PSM_APPLY); } } CString ext = AfxGetMyApp()->IsIniValid() ? _T("ini") : _T("reg"); CFileDialog fileSaveDialog(FALSE, ext, _T("mpc-hc-settings.") + ext); if (fileSaveDialog.DoModal() == IDOK) { if (AfxGetMyApp()->ExportSettings(fileSaveDialog.GetPathName())) { MessageBox(ResStr(IDS_EXPORT_SETTINGS_SUCCESS), ResStr(IDS_EXPORT_SETTINGS), MB_ICONINFORMATION | MB_OK); } else { MessageBox(ResStr(IDS_EXPORT_SETTINGS_FAILED), ResStr(IDS_EXPORT_SETTINGS), MB_ICONERROR | MB_OK); } } }
nfdresult_t NFD_SaveDialog( const nfdchar_t *filterList, const nfdchar_t *defaultPath, nfdchar_t **outPath ) { nfdresult_t nfdResult = NFD_ERROR; // Init COM library. HRESULT result = ::CoInitializeEx(NULL, ::COINIT_APARTMENTTHREADED | ::COINIT_DISABLE_OLE1DDE ); if ( !SUCCEEDED(result)) { NFDi_SetError("Could not initialize COM."); return NFD_ERROR; } ::IFileSaveDialog *fileSaveDialog(NULL); // Create dialog result = ::CoCreateInstance(::CLSID_FileSaveDialog, NULL, CLSCTX_ALL, ::IID_IFileSaveDialog, reinterpret_cast<void**>(&fileSaveDialog) ); if ( !SUCCEEDED(result) ) { NFDi_SetError("Could not create dialog."); goto end; } // Build the filter list if ( !AddFiltersToDialog( fileSaveDialog, filterList ) ) { goto end; } // Set the default path if ( !SetDefaultPath( fileSaveDialog, defaultPath ) ) { goto end; } // Show the dialog. result = fileSaveDialog->Show(NULL); if ( SUCCEEDED(result) ) { // Get the file name ::IShellItem *shellItem; result = fileSaveDialog->GetResult(&shellItem); if ( !SUCCEEDED(result) ) { NFDi_SetError("Could not get shell item from dialog."); goto end; } wchar_t *filePath(NULL); result = shellItem->GetDisplayName(::SIGDN_FILESYSPATH, &filePath); if ( !SUCCEEDED(result) ) { NFDi_SetError("Could not get file path for selected."); goto end; } CopyWCharToNFDChar( filePath, outPath ); CoTaskMemFree(filePath); if ( !*outPath ) { /* error is malloc-based, error message would be redundant */ goto end; } nfdResult = NFD_OKAY; shellItem->Release(); } else if (result == HRESULT_FROM_WIN32(ERROR_CANCELLED) ) { nfdResult = NFD_CANCEL; } else { NFDi_SetError("File dialog box show failed."); nfdResult = NFD_ERROR; } end: ::CoUninitialize(); return nfdResult; }