Drag and Drop im CListControl



  • Hallo, ich wollte für ein Listcontrol Drag and Drop ermöglichen.
    Ich bin wie folgt in der dialogbasierenden Anwendung vorgegangen:

    1. Control mit Eigenschaft "Dateien annehmen" versehen
    2. Auf Klasse des Dialoges WM_DROPFILES hinzugefügt und folgendes darin
    angelegt:

    void CTestDlg::OnDropFiles(HDROP hDropInfo)
    {
    
    	UINT i = 0;
    	UINT nFiles = ::DragQueryFile(hDropInfo, (UINT) -1, NULL, 0);
    	for (i = 0; i < nFiles; i++)
    	{
    		TCHAR szFileName[_MAX_PATH];
    		::DragQueryFile(hDropInfo, i, szFileName, _MAX_PATH);
    
    		MessageBox(szFileName);
    	}
    
    }
    

    Nun dachte ich eigentlich, dass damit schon alles getan wäre. Nur wird
    leider OnDropFiles für den ganzen Dialog ausgeführt, wenn ich vom Desktop
    eine Datei herüber ziehe. Es soll ja aber nur für das ListControl gelten.
    Denn nur darauf soll man die Dateien ziehen können.

    In der MessageMap steht lediglich folgendes:

    ON_WM_DROPFILES()
    

    In der Headerdatei ist unter public: enthalten:

    afx_msg void OnDropFiles(HDROP hDropInfo);
    

    Ich habe es mir sicher zu einfach gemacht, wüsste aber auch nicht, wie
    man es noch anders anstellen könnte und wäre über eure Hilfe sehr froh!


  • Mod

    Dann musst Du eben auch nicht den Dialog sondern genau dieses Control angeben für den Drop.

    Dann musst Du den Drop Handler auch in das Control einbauen.



  • Hallo Martin,

    da liegt schon mein Problem. Ich weiß nicht, welcher Ereignishandler dafür
    zuständig ist und wie ich das Konstrukt umbauen müsste 🙄


Anmelden zum Antworten