Witam jak w dialog boxie przy otwieraniu plików z tymi dwiema flagami (OFN_ALLOWMULTISELECT | OFN_EXPLORER) wyodrębnić otworzone pliki? bo właściwie w buforze ofn.lpstrFile = szFile; po otwarciu jest tylko ścieżka do katalogu i nic więcej. no chyba że wybiore tylko jeden plik to mam całą ścieżkę do pliku, ale mi zależy na multiselect.
Chyba już zadawałeś to pytanie(jeżeli się mylę to sorry, a jak nie to... przykre): http://msdn.microsoft.com/en-us/library/ms646839%28v=vs.85%29.aspx
MSDN napisał(a)
lpstrFile
LPTSTR
...
If the OFN_ALLOWMULTISELECT flag is set and the user selects multiple files, the buffer contains the current directory followed by the file names of the selected files. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name.
Czyli tłumacząc na ludzki wygląda to np. tak: C:\jakis_folder\inny_folder\0plik1.txt\0plik2.xyz\0\0 - \0 to jest NULL
//edit: ehh już o to pytałeś...
Ta, tylko że ja po otworzeniu wielu plików w tej zmiennej ofn.lpstrFile = szFile; dostaje tylko i wyłącznie scieżke do katalogu z plikami, nie ma tam nic wskazującego na nazwy plików.
całość wygląda tak:
OPENFILENAME ofn;
TCHAR szFile[MAX_PATH];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "Pliki audio (*.mp3;*.wav;*.ogg;*.mod;*.it;*.s3d;*xm)\0*.mp3;*.wav;*.ogg;*.mod;*.it;*.s3d;*.xm\0Wszystkie pliki (*.*)\0*.*\0";
ofn.nFilterIndex = 1;
if(redir==1 and firinitd==0){
ofn.lpstrInitialDir = initial_m_dir;
firinitd=1;
}else{ofn.lpstrInitialDir = NULL; }
ofn.lpstrFileTitle = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_EXPLORER;
if(GetOpenFileName(&ofn)){
dodaj_play_listy(szFile);
}
nie ma tam nic wskazującego na nazwy plików.
Bo to, co zwraca dialog, składa się z kilku elementów - ścieżki do katalogu i nazw wybranych plików. Wszystkie te elementy oddzielone są od siebie wartością zero, dlatego też widzisz tylko katalog.
Ścieżki do plików możesz złożyć w ten sposób:
char szFile[] = "katalog\0file1\0file2\0file3\0"; // przykładowo
char* p = szFile;
p += strlen(szFile) + 1;
while(*p)
{
cout << szFile << '\\' << p << '\n';
p += strlen(p) + 1;
}
Ok dzięki ci wielkie, pomogło.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.