C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Урок 34. Drag-n-drop в интерфейсе Проводника / Уроки C++ .NET / Visual C++ .NET

Visual C++.NET
Урок 34. Drag-n-drop в интерфейсе Проводника

Если мы делаем Drag-n-drop в программе с разделенным сплиттером окном, то по умолчанию перетаскиваемые в программу файлы попадают в окно-рамку и там же мы по идее и можем сделать соответствующий обработчик. Но по логике обработчик у нас должен быть в одном из видов - левом (CTreeView) или правом (CListView). На этом уроке мы посмотрим, как правая часть нашего окна может принимать файлы.

Вот что мы должны для этого сделать:

Сначала мы добавим вызов DragAcceptFiles в метод класса окна-рамки (для того, чтобЫ правая часть нашей программы могла принимать файлы):

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
    CCreateContext* pContext)
{
  ...
  GetRightPane()->DragAcceptFiles(); 
  return TRUE;
}

После чего добавляем обработчик для сообщения WM_DROPFILES для правого вида. Для этого мы в окне Properties нажимаем на кнопку Messages и в списке сообщений Windows выбираем WM_DROPFILES:

Добавление обработчика для 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, то иконка перетаскиваемого файла будет разная в левой части нашей программы и в правой. В левой части иконка будет показана перечеркнутым кругом, показывающим, что перетаскивание запрещено, а в правой - в виде стрелки с прямоугольничком, показывающим, что перетаскивание разрешено.