OFN_ALLOWMULTISELECT i OFN_EXPLORER

0

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.

1

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ś...

0

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);
                   }      
0

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;
}
0

Ok dzięki ci wielkie, pomogło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1