Учебник по 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());

    }

    }



    Содержание раздела