CTreeListCtrl: Простейший TreeView с
колонками
Автор: David Carballo.
Среда разработки: VC6, NT4 SP3, Comctl32.dll 4.72.3110.1
Как вставить CTreeListCtrl в свой проект?
Для этого достаточно проделать два простых
шага:
- Добавьте файлы CTreeListCtrl.h и CTreeListCtrl.cpp в свой
проект.
- Импортируйте State.bmp как ресурс и присвойте ему
идентификатор IDB_STATE.
Теперь всё готово для его использования.
Использование CTreeListCtrl
Допустим в Вашем разделе жёсткого диска
имеется две директории: Program Files и Winnt. В Program Files
содержатся ещё три папки: Microsoft Office, Microsoft Visual Studio
и InstallShield. В Winnt содержатся две папки: profiles и system32,
а в папке profiles содержатся All Users, Administrator и Davidc.
Порядок добавления элементов в дерево будет
следующим:
- C:\
- Program Files
- Microsoft Office
- Microsoft Visual Studio
- InstallShield
- Winnt
- profiles
- All Users
- Administrator
- system32
А теперь давайте рассмотрим основные шаги
использования такого дерева:
- Объявляем переменную член (m_tree) в классе
родительского окна.
- В функции-обработчике события WM_CREATE или WM_INITDIALOG
создайте окно дерева. Так же можно его
использовать через DDX_Control.
- Добавьте столько столбцов, сколько необходимо.
- Создайте список картинок (image list) для этого
элемента управления.
- Для добавления элементов дерева используйте
функцию AddItem, устанавливая тем самым их уровень, а
затем вызывайте SetItemText для каждой колонки.
Далее представлен код, создающий дерево,
которое изображено на рисунке.
// Первый шаг: Создание окна.
m_tree.Create
(
WS_BORDER | WS_CHILD | WS_VISIBLE | LVS_REPORT |
LVS_SINGLESEL | LVS_SHOWSELALWAYS,
CRect(12, 12, 288, 228),
this,
0x100
);
// Второй шаг: вставляем два столбца: имя папки и размер папки
LVCOLUMN column;
column.mask = LVCF_FMT | LVCF_IMAGE | LVCF_TEXT | LVCF_WIDTH;
column.fmt = LVCFMT_LEFT;
column.cx = 200;
column.pszText = _T("Folder");
column.iSubItem = 0;
m_tree.InsertColumn(0, &column);
column.fmt = LVCFMT_RIGHT;
column.cx = 75;
column.pszText = _T("Size");
column.iSubItem = 1;
m_tree.InsertColumn(1, &column);
// Третий шаг: создаём и заполняем список картинок (image list)
m_il.Create(IDB_FOLDERS, 16, 1, RGB(255, 0, 255));
m_tree.SetImageList(&m_il, LVSIL_SMALL);
// Четвёртый шаг: Заполняем содержимое дерева.
CString asFolders[] =
{
"C:", "Program Files", "Microsoft Office",
"Microsoft Visual Studio", "InstallShield",
"Winnt", "profiles", "All Users", "Administrator" ,
"system32"
};
CString asSizes[]=
{ "100", "60", "10", "20", "30", "40", "5",
"2", "1" , "35"
};
int anLevels[] = { 0, 1, 2, 2, 2, 1, 2, 3, 3, 2 };
for (int i = 0; i < sizeof(asFolders) /
sizeof(asFolders[0]); i++)
{
int iItem;
iItem = m_tree.AddItem(asFolders[i], i % 3, anLevels[i]);
m_tree.SetItemText(iItem, 1, asSizes[i]);
}
Пример приложения
Приложение, для которого потребовалось такое
дерево, это программа, которая исследует
логический диск на предмет наличия директорий и
показывает размер каждой директории. После
получения такой информации очень легко
почистить свой винчестер от ненужного хлама.
Скриншот этого приложения:
Downloads
Приложение CheckDirectorySizes
- 116 KB
Скачать демонстрационный
проект - 13.4 Kb
Скачать исходник - 3.44 Kb
|