STDMETHODIMP COpenFileListener::OnFileOk(IFileDialog* pfd) { IShellItemArray *psiaResults; IFileDialogCustomize *pfdc; HRESULT hr; IFileOpenDialog *fod; FILEINFO fileinfoTmp = {0}; DWORD choice; fileinfoTmp.parentList = pFInfoList; hr = pfd->QueryInterface(IID_PPV_ARGS(&fod)); if(SUCCEEDED(hr)) { hr = fod->GetSelectedItems(&psiaResults); if (SUCCEEDED(hr)) { DWORD fileCount; IShellItem *isi; LPWSTR pwsz = NULL; psiaResults->GetCount(&fileCount); for(DWORD i=0;i<fileCount;i++) { psiaResults->GetItemAt(i,&isi); isi->GetDisplayName(SIGDN_FILESYSPATH,&pwsz); isi->Release(); fileinfoTmp.szFilename = pwsz; pFInfoList->fInfos.push_back(fileinfoTmp); CoTaskMemFree(pwsz); } psiaResults->Release(); } fod->Release(); } hr = pfd->QueryInterface(IID_PPV_ARGS(&pfdc)); if(SUCCEEDED(hr)) { hr = pfdc->GetSelectedControlItem(FDIALOG_OPENCHOICES,&choice); if(SUCCEEDED(hr)) { if(choice==FDIALOG_CHOICE_REPARENT) { pFInfoList->uiCmdOpts = CMD_REPARENT; } else if(choice==FDIALOG_CHOICE_ALLHASHES) { pFInfoList->uiCmdOpts = CMD_ALLHASHES; } else if(choice==FDIALOG_CHOICE_BSD) { pFInfoList->uiCmdOpts = CMD_FORCE_BSD; } } pfdc->Release(); } return S_OK; }
BOOL CSaveTextFileDialog::OnFileNameOK() { if (SysVersion::IsVistaOrLater()) { DWORD result; IFileDialogCustomize* pfdc = GetIFileDialogCustomize(); pfdc->GetSelectedControlItem(IDC_COMBO1, &result); pfdc->Release(); m_e = (CTextFile::enc)result; } else { m_e = (CTextFile::enc)m_encoding.GetItemData(m_encoding.GetCurSel()); } return __super::OnFileNameOK(); }