Drag&Drop für mehrere CEdit



  • Hallo Leute,

    ich habe in einer Anwendung bereits für ein CEdit-Feld Drag&Drop implementiert. In der OnDropFiles-Funktion filtere ich dann nach den Dateiendungen. (mkv, m2ts, ssif)

    void CTabSettings::OnDropFiles(HDROP hDropInfo)
    {
    	TCHAR szPath[1024];
    
    	DragQueryFile(hDropInfo, 0, szPath, sizeof(szPath));
    
    	theApp.csInputPathVideo = szPath;
    
    	if((theApp.csInputPathVideo.Right(5).Find(_T("mkv")) != -1) || (theApp.csInputPathVideo.Right(5).Find(_T("m2ts")) != -1) || (theApp.csInputPathVideo.Right(5).Find(_T("ssif")) != -1))
    	{
    		m_Edit_SourceFile.SetWindowTextW(theApp.csInputPathVideo);
    		DragFinish(hDropInfo);
    	}
    	else
    	{
    		MessageBox(_T("Insert valid file (.m2ts/.ssif/.mkv)"), _T("ERROR"), MB_ICONERROR | MB_OK);
    	}
    
    	CDialogEx::OnDropFiles(hDropInfo);
    }
    

    Jetzt möchte ich ein anderes CEdit-Feld auch mit Drag&Drop einbauen, allerdings soll dieses mal nur die Endung .txt akzeptiert werden. Wie genau mach ich das denn? Muss ich dann in der gleichen OnDrop-Funktion überprüfen welches CEdit ausgewählt wurde oder geht das anders?

    MfG und danke im Voraus



  • Verstehst du deinen eigenen Code?
    Weiß nicht genau, was da passiert, aber wenn ich das richtig sehe, greifst du auf das Edit Control doch über m_Edit_SourceFile zu. Und in der Zeile drüber ist die Bedingung mit den Dateiendungen. Was spricht dagegen, ein else zu machen, auf die andere Endung zu prüfen und dann entsprechend das andere Edit Control anzusprechen?



  • Ja, ich denke ich verstehe den Code ^^

    Darauf bin schon selbst gekommen aber da spricht dagegen, dass die Unterscheidung nicht über die Edits erfolgt sondern über eine Abfrage. Das würde ja bedeuten: wenn ich ein txt-Datei in das Editfeld ziehe, das nur mkv usw akzeptieren soll, wird deren Pfad in das andere Edit geschrieben.



  • flatterjochen schrieb:

    Das würde ja bedeuten: wenn ich ein txt-Datei in das Editfeld ziehe

    CTabSettings::OnDropFiles schaut nicht so aus, als ob es zum Edit gehören würde. Ist es so? Wie ist der Code verkabbelt? Das kannst ja nur du wissen. Aber es sieht so aus, als ob es zu einem Tab Control gehören würde, du kannst die Dateien also nicht nur auf Edit Felder ziehen.
    Wenn du das unterbinden willst, musst du das OnDropFiles von den entsprechenden Edit Controls überschreiben.


  • Mod

    Ich bezweifle ob Du Deinen Code verstehst.

    Dein gezeigter Code akzeptiert auch diesen Dateinamen 123mkv12!

    Grundsätzlich gibt es fertigen Code:
    http://www.codeproject.com/script/Articles/ViewDownloads.aspx?aid=1899
    http://www.codeguru.com/cpp/controls/editctrl/article.php/c535/Drag-text-between-edit-controls.htm

    etc.



  • Ich glaube er meint, wenn in einer GUI mehrere Edit-Ctrls drag&drop-fähig sein, allerdings unterschiedliche Datei-Endungen zulassen sollen.

    Ich hab das bisher immer so realisiert, dass ich in der OnDropFiles() die Cursor-Position abfrage und die dann mit den Positionen der Edits vergleiche. Innerhalb dieses if-elseif-Zweigs können dann die Bedingungen für die zugelassenen Dateiendungen abgearbeitet werden...

    Obs schön ist oder gar eine fix und fertige Funktion gibt weiß ich nicht. Allerdings befürchte ich, falls bereits eine fertige Funktion in der MFC existiert, dass da wohl die gleiche Denkweise dahinter steckt.


  • Mod

    Das wird doch in den Beispielen behandelt. Ansonsten ist das mit dem Vergleich der Endung erst möglich, wenn der OnDropFile abläuft.

    Allerdings muss man das eben richtig machn und nicht wie im OP.


Log in to reply