SendDlgItemMessage(hWnd, IDC_PROGRESS1, PBM_SETPOS, 100-nTekV, 0);
}
break;
5. ОКНО ДЕРЕВЬЕВ ЭЛЕМЕНТОВ
Вставляем на форму окно деревьев элементов
Has buttons |
Добавит кнопочки + - |
Has lines |
Добавить линии между дочерними ветками |
Lines at root |
Добавить линии между родительскими ветками |
Edit labels |
Названия элементов списка могут быть изменены |
Disable drag drop |
Запрещает операции drag –drop с элементами списка |
Border |
Дерево заключить в рамку |
Show selection always |
Выбранные элементы остаются таковыми после потери фокуса |
Управление деревом идет из программы:
//добавим описание структур, на которых держится дерево.
//описание структур см. MSDN
TV_INSERTSTRUCT TV_InsertStruct;
TV_ITEM TV_Item;
int i, j;
HIMAGELIST himl ;
HBITMAP hbmImage;
//добавим в ресурсы два битмапа с изображениями, которые должны появляться в дереве:
Для инициализации списка придется потрудиться:
switch (wMsg)
{
case WM_INITDIALOG:
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
//Инициализация дерева просмотра
//сначала получим хендел дерева
hList1 = GetDlgItem (hWnd,IDC_TREE1);
//начнем заполнение структур. Новая ветка ставиться последней при добавлении
TV_InsertStruct.hInsertAfter = TVI_LAST;
//информация списка содержится в полях: pszText, cchTextMax
//а так же в поле iImage
// а так же в поле lParam
// а так же в поле сСhildren
// а так же в поле iSelectedItem
TV_Item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_PARAM | TVIF_CHILDREN| TVIF_SELECTEDIMAGE;
//корневые ветки заполним значениями десятков от 0 до 100
for(i=0;i<100;i+=10)
{ //это корневая ветка
TV_InsertStruct.hParent=TVI_ROOT;
//внесем надпись ветки
TV_Item.pszText=itoa(i,cBuffer,10);
//рисунок к ней приставляется с индексом 0 из списка рисунков
TV_Item.iImage=0;
//при выборе этой ветки ей приставляется тот же рисунок
TV_Item.iSelectedImage=0;
//эта ветка имеет детей
TV_Item.cChildren = 1;
//присоединить ветку к дереву
TV_InsertStruct.item = TV_Item;
//вставить заготовку новой ветки
TV_InsertStruct.hParent = TreeView_InsertItem(hList1, &TV_InsertStruct);
//веточки-дети с данными единиц десятков
for (j=1;j<10;j++)
{ //внесем надпись ветки
TV_Item.pszText=itoa(i+j,cBuffer,10);
//рисунок к ней приставляется с индексом 1 из списка рисунков
TV_Item.iImage=1;
//а при выборе этой ветки – присоединяется рисунок с индексом 2
TV_Item.iSelectedImage=2;
//детей у этой ветки нет
TV_Item.cChildren = 0;
//вставить ветку в дерево
TV_InsertStruct.item = TV_Item;
TreeView_InsertItem(hList1, &TV_InsertStruct);
}
}
// Создание image list (листа с рисунками)
himl = ImageList_LoadBitmap (ghInstance,
MAKEINTRESOURCE (IDB_BITMAP1), //получение указателя на bitmap
16, //размер рисунка по ширине (в пикселях)
0, //последний индекс рисунков в загружаемом bitmap-е
CLR_NONE // хендел на bitmap, выступающий в роли маски
) ;
//Загрузка дополнительных рисунков (если это надо)
hbmImage=LoadBitmap(ghInstance, MAKEINTRESOURCE (IDB_BITMAP2));
//добавление загруженных рисунков к существующему image list
ImageList_Add(himl,
hbmImage ,
0 // хендел на bitmap, выступающий в роли маски
);
//установка связи между листом рисунков и деревом элементов
TreeView_SetImageList (hList1, himl, TVSIL_NORMAL ) ;
После компиляции и запуска программы имеем следующее:
Обработка нотификационных сообщений от дерева происходит по сценарию:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.