Учебник по Visual C++ .Net


Реакция на выбор узла дерева Поиск


CLeftView::OnSelchanged (NMHDR *pNMHDR, LRESULT *pResult)

{

NM_TREEVIEW* p = (NM_TREEVIEW*)pNMHDR;

//====== Освобождение контейнера текущих файлов

GetDocument()->FreeDocs();

//====== Поиск нужных файлов

SearchForDocs (GetPath(p->itemNew.hItem));

//====== Генерация картинок и демонстрация их в окне

//====== правого представления

GetDocument()->ProcessDocs();

*pResult = 0;

}

Схема обработки сообщения =TVN_SELCHANGED такая же — WM_NOTIFY, но алгоритм отличается. Акцент в обработке переносится в класс документа. Там следует хранить данные о файлах документов, обнаруженных в выбранной папке или на логическом диске, туда же следует ввести новые методы: FreeDocs и ProcessDocs. При изменении выбора пользователя мы:

  • уничтожаем предыдущие данные с помощью метода FreeDocs;

  • ищем и запоминаем свои файлы в выбранном объекте файловой системы (метод SearchForDocs);

  • создаем новые объекты вспомогательного класса CPolygon;
  • просим их прочесть свои данные в обнаруженных файлах;

  • отображаем их в виде картинок в окне правого представления с помощью метода ProcessDocs.

Поиск документов своего типа (mgn-файлов) производится по той же схеме с использованием класса CFindFile и его методов поиска объектов файловой системы. Но если ранее мы просматривали все объекты, задав маску поиска "*.*", то теперь мы можем сузить поиск, задав маску "* .mgn". Полные пути найденных файлов будем хранить в контейнере m_sFiles типа vector<cstring>, который чуть позже мы вставим в число членов класса документа. А сейчас дополните класс CLef tview методом:

void CLeftView::SearchForDocs (CString s) {

//====== Дополняем файловый путь маской поиска

s += "*.mgn";

CFileFind cff;

BOOL bFound = cff.FindFile(s);

while (bFound)

{

bFound = cff .FindNextFile() ;

//==== Запоминаем файловые пути в контейнере строк

GetDocument()->m sFiles.push back(cff.GetFilePath());

}

}




Начало  Назад  Вперед