Урок 34. Drag-n-drop в интерфейсе Проводника / Уроки C++ .NET / Visual C++ .NET
Visual C++.NET Урок 34. Drag-n-drop в интерфейсе Проводника
Если мы делаем Drag-n-drop в программе с разделенным сплиттером окном, то по умолчанию перетаскиваемые в программу файлы попадают в окно-рамку и там же мы по идее и можем сделать соответствующий обработчик. Но по логике обработчик у нас должен быть в одном из видов - левом (CTreeView) или правом (CListView). На этом уроке мы посмотрим, как правая часть нашего окна может принимать файлы.
Вот что мы должны для этого сделать:
Сначала мы добавим вызов DragAcceptFiles в метод класса окна-рамки (для того, чтобЫ правая часть нашей программы могла принимать файлы):
После чего добавляем обработчик для сообщения WM_DROPFILES для правого вида. Для этого мы в окне Properties нажимаем на кнопку Messages и в списке сообщений Windows выбираем WM_DROPFILES:
Вот текст добавляемого обработчика:
void CShortcutsTestView::OnDropFiles(HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default//Показываем полный путь.char sPath[MAX_PATH];
DragQueryFile(hDropInfo, 0, sPath, sizeof(sPath));
AfxMessageBox(sPath);
//Показываем точку, в которой отпустили.
CPoint *point = new CPoint;
DragQueryPoint(hDropInfo, point);
CString s;
s.Format("%d, %d", point->x, point->y);
AfxMessageBox(s);
CListView::OnDropFiles(hDropInfo);
}
В данном обработчике мы просто показываем в messagebox'ах полное имя перетаскиваемого файла и точку, в которой мы бросаем перетаскиваемый файл. настоящей программе, разумеется, мы напишем в этом обработчике что-нибудь более осмысленное.
Обратите внимание, что когда мы перетаскиваем файл из Проводника Windows, то иконка перетаскиваемого файла будет разная в левой части нашей программы и в правой. В левой части иконка будет показана перечеркнутым кругом, показывающим, что перетаскивание запрещено, а в правой - в виде стрелки с прямоугольничком, показывающим, что перетаскивание разрешено.