프로그래밍/Visual C++

MFC - Drag and Drop 구현

꾸션 2019. 4. 28. 00:56

DragAcceptFiles()함수와 WM_DROPFILES메세지를 이용해서 드래그앤드랍을 구현 할 수 있습니다.

다이얼로그 베이스 프로젝트에서 아래와 같이 헤더와 소스파일에서 구현하면 됩니다.

 

CMFCDropFilesDlg.h

protected:
    afx_msg void OnDropFiles(HDROP dropInfo);
    DECLARE_MESSAGE_MAP()

 

CMFCDropFilesDlg.cpp

BEGIN_MESSAGE_MAP(CMFCDropFilesDlg, CDialogEx)
	ON_WM_DROPFILES()
END_MESSAGE_MAP()

BOOL CMFCDropFilesDlg::OnInitDialog()
{
	DragAcceptFiles(); // entire dialog
	list.DragAcceptFiles(); // control represented by variable m_oPath
}

void CMFCDropFilesDlg::OnDropFiles(HDROP dropInfo)
{
	CString strFile;
	DWORD nBuffer = 0;

	// Get the number of files dropped
	int nFilesDropped = DragQueryFile(dropInfo, 0xFFFFFFFF, NULL, 0);

	for (int i = 0; i < nFilesDropped; i++)
	{
		// Get the buffer size of the file.
		nBuffer = DragQueryFile(dropInfo, i, NULL, 0);

		// Get path and name of the file
		DragQueryFile(dropInfo, i, strFile.GetBuffer(nBuffer + 1), nBuffer + 1);
		strFile.ReleaseBuffer();

		list.SetWindowText((strFile));
	}

	// Free the memory block containing the dropped-file information
	DragFinish(dropInfo);
}