GetOpenFileName mit OFN_ALLOWMULTISELECT



  • Heiho

    ich kann ohne probleme ein verzeichnis auslesen und alle dateien anzeigen lassen

    aber ich hab ein problem damit wenn ich selber mehere dateien auswaehle, das ich alle aufliste

    void COwnClass::OnBrowseFiles(){
    	int BufferSize = 32*1024;
    	OPENFILENAME ofn;
    	ZeroMemory(&ofn, sizeof(OPENFILENAME));
    	ofn.lStructSize = sizeof (OPENFILENAME);
    	ofn.hwndOwner = m_hWnd;
    	ofn.lpstrFilter = _T("All files (*.*)");
    	TCHAR *tcBuffer = new TCHAR[BufferSize];
    	SecureZeroMemory(tcBuffer, BufferSize);
    	ofn.lpstrFile = tcBuffer;
    	ofn.nMaxFile = BufferSize;
    	_tstring folder = settings.DefaultFolder();
    	ofn.lpstrInitialDir = folder.c_str();
    	ofn.Flags = OFN_EXPLORER|OFN_ALLOWMULTISELECT|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST;
    	if(GetOpenFileName(&ofn)==TRUE){
    		WIN32_FIND_DATA FindFileData;
    		HANDLE hFind = FindFirstFile(ofn.lpstrFile+ofn.nFileOffset, &FindFileData);
    		m_lcList.AddItem(FindFileData.cFileName);
    		m_lcList.AddSubItem(1, FindFileData.cFileName);
    
    		while(FindNextFile(hFind, &FindFileData) != 0){
    			m_lcList.AddItem(FindFileData.cFileName);
    			m_lcList.AddSubItem(1, FindFileData.cFileName);
    		}
    		FindClose(hFind);
    	} 
    }
    

    bei einer einzelnen datei klappt es problemlos, aber sobald ich mehere auswaehle bekomm ich immer nur die letzte ausgewaehlte datei

    zu huelf



  • Das mit ner Dateienumeration zu lösen, ist doch irgendwie unsinnig: Da weißt Du doch gar nicht, was der Benutzer markiert hat und was nicht ?! Machs einfach so:

    // ...
    
    TCHAR szSelectedFile[(MAX_PATH * 100) + 1];
    OPENFILENAME ofnOpenFile;
    // ...
    ofnOpenFile.lpstrFile	= szSelectedFile;
    ofnOpenFile.nMaxFile	= (MAX_PATH * 100) + 1;
    // ...
    if(GetOpenFileName(&ofnOpenFile))
    {
    	TCHAR szFilePath[MAX_PATH + 1];
    	UINT  uiOffset = ofnOpenFile.nFileOffset;
    
    	lstrcpy(szFilePath, szSelectedFile);
    	lstrcat(szFilePath, TEXT("\\"));
    
    	while(szSelectedFile[uiOffset] != 0)
    	{
    		lstrcpy(&szFilePath[ofnOpenFile.nFileOffset], &szSelectedFile[uiOffset]);
    		uiOffset += lstrlen(&szSelectedFile[uiOffset]) + 1;
    		// szFilePath dann im Folgenden verarbeiten
    		// ...
    	}
    }
    
    // ...
    


  • // wegedit wegen bloedheit

    vielen dank, das war genau das was ich brauchte - haette ja mal genauer hinschaun sollen / koennen

    danke {=



  • 😉 , hatte gestern keine Zeit mehr auf dein letzten Post zu antworten (also als er noch nicht editiert war), aber hat sich ja dann wohl geklärt 😉 .


Anmelden zum Antworten