/*Make sure to not use Unicode characters. Using the Unicode character set does some strange stuff unless you change the character pointers to LPWSTR and LPWCHAR */ #include using namespace std; #pragma comment( lib, "comctl32" ) #include #include #include #include bool rtsOpenFileDialog( char *filename, int filenameSize, const char *filetypes="All Files (*.*)\0*.*;") { OPENFILENAME *ofn = (OPENFILENAME*)GlobalAlloc(GMEM_FIXED,sizeof(OPENFILENAME)); ZeroMemory(ofn, sizeof(OPENFILENAME)); ofn->lStructSize = sizeof(OPENFILENAME); ofn->hwndOwner = NULL; ofn->lpstrFile = filename; cout<lpstrFile<nMaxFile = filenameSize; ofn->lpstrFilter = filetypes ? filetypes : "All Files (*.*)\0*.*;"; ofn->nFilterIndex = 0; ofn->lpstrFileTitle = NULL; ofn->nMaxFileTitle = 0; ofn->lpstrInitialDir = NULL; ofn->Flags = OFN_ENABLESIZING | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST |OFN_EXPLORER | OFN_HIDEREADONLY; //allow multiple files to be loaded if the user says so //if(multi) ofn->Flags = ofn->Flags | OFN_ALLOWMULTISELECT; BOOL success = GetOpenFileNameA(ofn); //DWORD myfoo = CommDlgExtendedError(); GlobalFree(ofn); return success; } bool rtsSaveFileDialog( char *filename, int filenameSize, const char *filetypes="All Files (*.*)\0*.*;" ) { OPENFILENAME *ofn = (OPENFILENAME*)GlobalAlloc(GMEM_FIXED,sizeof(OPENFILENAME)); ZeroMemory(ofn, sizeof(OPENFILENAME)); ofn->lStructSize = sizeof(OPENFILENAME); ofn->hwndOwner = NULL; ofn->lpstrFile = filename; ofn->nMaxFile = filenameSize; ofn->lpstrFilter = filetypes ? filetypes : "All Files (*.*)\0*.*;"; ofn->nFilterIndex = 0; ofn->lpstrFileTitle = NULL; ofn->nMaxFileTitle = 0; ofn->lpstrInitialDir = NULL; ofn->Flags = OFN_ENABLESIZING | OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST |OFN_EXPLORER | OFN_HIDEREADONLY; BOOL success = GetSaveFileNameA(ofn); //DWORD myfoo = CommDlgExtendedError(); GlobalFree(ofn); return success; } bool rts_winBrowseFolderDialog(char* title, char* foldername) { BROWSEINFO* bi = (BROWSEINFO*)GlobalAlloc(GMEM_FIXED,sizeof(BROWSEINFO)); ZeroMemory(bi, sizeof(BROWSEINFO)); char directory[MAX_PATH] = ""; bi->pszDisplayName = directory; bi->lpszTitle = title; bi->pidlRoot = NULL; bi->lpfn = NULL; bi->ulFlags = 0; PIDLIST_ABSOLUTE pID = SHBrowseForFolder(bi); SHGetPathFromIDList(pID, foldername); return true; }