/*********************************************************************** * GetFileNamePreview [MSVFW32.@] */ static BOOL GetFileNamePreview(LPVOID lpofn,BOOL bSave,BOOL bUnicode) { CHAR szFunctionName[20]; BOOL (*fnGetFileName)(LPVOID); HMODULE hComdlg32; BOOL ret; FIXME("(%p,%d,%d), semi-stub!\n",lpofn,bSave,bUnicode); lstrcpyA(szFunctionName, (bSave ? "GetSaveFileName" : "GetOpenFileName")); lstrcatA(szFunctionName, (bUnicode ? "W" : "A")); hComdlg32 = LoadLibraryA("COMDLG32.DLL"); if (hComdlg32 == NULL) return FALSE; fnGetFileName = (LPVOID)GetProcAddress(hComdlg32, szFunctionName); if (fnGetFileName == NULL) return FALSE; /* FIXME: need to add OFN_ENABLEHOOK and our own handler */ ret = fnGetFileName(lpofn); FreeLibrary(hComdlg32); return ret; }
string clsMySTDLib::fnCreateFile(const string &strPath,const string &strExtn, const bool blnAppendDateTime) { ofstream fout; string strFileName=fnPrepareFileName(strPath,strExtn,blnAppendDateTime); fout.open(strFileName,ios::trunc); fout.close(); return fnGetFileName(strFileName); }
string clsMySTDLib::fnWriteDataToFile(vector<string> &strValue, const string &strPath, const string &strExtn, const bool blnAppendDateTime) { ofstream fout; string strFileName=fnPrepareFileName(strPath,strExtn,blnAppendDateTime); fout.open(strFileName,ios::trunc); fnWriteData(fout,strValue); return fnGetFileName(strFileName); }
bbCHAR* uiDlgFileName(uiWINH hWin, const bbCHAR* pPath, bbUINT opt, uiDlgFileNameFilter* const pFilter) { #if (bbOS == bbOS_WIN32) || (bbOS == bbOS_WINCE) bbCHAR* pFileNameBuffer; bbUINT const bufferstart = (opt & uiDLGFILEOPT_MULTISELECT) ? sizeof(uiDlgFileNameBlock)/sizeof(bbCHAR) : 0; OPENFILENAME ofn; bbMemClear(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hWin; if (pPath) ofn.nMaxFile = bbStrLen(pPath) + 1; if (ofn.nMaxFile < 512) ofn.nMaxFile = 512; if ((pFileNameBuffer = (bbCHAR*) bbMemAlloc(sizeof(bbCHAR) * ofn.nMaxFile + sizeof(uiDlgFileNameBlock))) == NULL) return NULL; ofn.lpstrFile = pFileNameBuffer + bufferstart; if (pPath) bbStrCpy(ofn.lpstrFile, pPath); else *ofn.lpstrFile = 0; if (pFilter) { ofn.nFilterIndex = pFilter->FilterIndex; ofn.lpstrFilter = pFilter->pFilter; } ofn.Flags = (opt & (uiDLGFILEOPT_MULTISELECT|uiDLGFILEOPT_NODEREFERENCELINKS|uiDLGFILEOPT_OVERWRITEPROMPT)) | OFN_DONTADDTORECENT | OFN_ENABLESIZING | OFN_NOTESTFILECREATE | OFN_HIDEREADONLY | OFN_EXPLORER; BOOL (__stdcall *fnGetFileName)(LPOPENFILENAME) = (opt & uiDLGFILEOPT_SAVE) ? GetSaveFileName : GetOpenFileName; if (fnGetFileName(&ofn) == 0) { DWORD err = CommDlgExtendedError(); if (err == FNERR_BUFFERTOOSMALL) { ofn.nMaxFile = *(WORD*)ofn.lpstrFile; if (bbMemRealloc(sizeof(bbCHAR) * ofn.nMaxFile + sizeof(uiDlgFileNameBlock), (void**)&pFileNameBuffer) != bbEOK) goto uiDlgFileSave_err; ofn.lpstrFile = pFileNameBuffer + bufferstart; if (fnGetFileName(&ofn)) goto uiDlgFileSave_ok; err = CommDlgExtendedError(); } if (err == 0) { bbErrSet(bbEEND); } else { bbErrSet(bbESYS); //xxx add error codes bbLog(bbErr, bbT("uiDlgFileSave: error %X\n"), err); } goto uiDlgFileSave_err; } uiDlgFileSave_ok: if (pFilter) { pFilter->FilterIndex = ofn.nFilterIndex; } if (opt & uiDLGFILEOPT_MULTISELECT) { ((uiDlgFileNameBlock*)pFileNameBuffer)->CurFileOffset = ((uiDlgFileNameBlock*)pFileNameBuffer)->FirstFileOffset = ofn.nFileOffset; if (ofn.nFileOffset > 0) pFileNameBuffer[ofn.nFileOffset + bufferstart - 1] = '\0'; // 0-term path also for single-selection case } return pFileNameBuffer; uiDlgFileSave_err: bbMemFree(pFileNameBuffer); return NULL; #else #endif }