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




Обращаемся к операционной системе - часть 3


Связывание списка с объектом m_Tree производит функция SetlmageList, последний параметр которой (TVSIL_NORMAL) говорит о том, что тип списка обычный, то есть состоит из двух изображений. Альтернативным выбором является TVSIL_STATE, справку о нем вы получите самостоятельно, если захотите. Поместите следующий код в файл LeftView.cpp. Он вставляет в дерево новый элемент с изображением, которое ему соответствует:

void CLeftView::AddItem (HTREEITEM h, LPCTSTR s)

{

SHFILEINFO Info;

int len = sizeof(Info);

//=== Добываем изображение (маленький значок)

::SHGetFileInfo (s, 0, SInfo, len, SHGFI_ICON

| SHGFI_SMALLICON); int id = Info.ilcon;

//=== Добываем изображение в выбранном состоянии

::SHGetFileInfo (s,0,Slnfo,len,

SHGFI_ICON | SHGFI_OPENICON | SHGFI_SMALLICON);

int idSel = Info.ilcon;

//====== Копируем параметр в рабочую строку

CString sName(s);

//=== Отсекаем лишние символы (сначала в конце строки)

if (sName.Right(1) == '\\')

sName.SetAt (sName.GetLength() - 1, '\0');

//====== Затем в начале строки

int iPos = sNarae.ReverseFind('\\') ;

if (iPos != -1)

sName = sNarne.Mid(iPos + 1) ;

//=== Вставляем узел в дерево

HTREEITEM hNew = m_Tree.InsertltemfsName,id,idSel,h);

//====== Вставляем пустой узел

if (NotErapty(s))

m_Tree.Insertltem("", 0, 0, hNew);

}

Функция SHGetFilelnf о вызывается дважды, так как от системы надо получить два индекса изображений: для объекта файловой системы в обычном состоянии и для него же в выбранном состоянии. Метод Insertltem класса CTreeCtrl вставляет узел в дерево. Его параметры задают:

  • местоположение узла, то есть описатель родительского узла (h), О соответствующий узлу дерева текст (s),

  • индексы двух изображений (id, idSel) в уже сформированном списке типа CImageList.

    Вставляемый в дерево логический диск надо проверить на наличие вложенных сущностей и вставить внутрь данного узла дерева хотя бы один элемент, когда диск не пуст. Если этого не сделаеть, то в дереве не будет присутствовать маркер (+), с помощью которого пользователь раскрывает узел.




    Содержание  Назад  Вперед