Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 02.05.2012
Сообщений: 5

Работа с TreeView

14.05.2012, 00:07. Показов 7234. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Пытаюсь создать аналог проводника для удобного перемещения по директориям.

Что пока получилось:
//За основу взят код из Азбуки программирования Румянцева.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hTreeView;
    RECT Rect;
    TV_INSERTSTRUCT TV_InsertStruct;
    static TV_ITEM TV_Item;
    
    
    int i,j;
    char* cBuffer[3]={"C:",
                      "D:",
                      "E:"};
 
    LPNMHDR nmh;
    HDC hDC;
    char str[100];
    
    HIMAGELIST himl;
    HBITMAP hBmp;
    HINSTANCE hInst=GetModuleHandle(0);
    int idxBooks;
 
    switch(uMsg)
    {
        case WM_CREATE:
            GetClientRect(hWnd,&Rect);
            hTreeView=CreateWindow(WC_TREEVIEW,"",
                WS_VISIBLE|WS_TABSTOP|WS_CHILD|
                TVS_HASLINES|TVS_HASBUTTONS|
                TVS_LINESATROOT,
                0,0,200,Rect.bottom,
                hWnd,NULL,GetModuleHandle(0),0);
 
 
            himl = ImageList_Create(33, 33, FALSE, 1, 0);
            hBmp = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_IMAGES));
            idxBooks = ImageList_Add(himl, hBmp, NULL);
 
            TV_InsertStruct.hInsertAfter=TVI_LAST;
            TV_Item.mask=TVIF_TEXT | TVIF_IMAGE | 
                             TVIF_SELECTEDIMAGE | TVIF_PARAM;
            TV_Item.iSelectedImage=TV_Item.iImage=idxBooks;
            for(int i=0;i<3;i++)
            {
                TV_InsertStruct.hParent=TVI_ROOT;
                TV_Item.pszText=cBuffer[i];
                TV_InsertStruct.item=TV_Item;
                TV_InsertStruct.hParent=TreeView_InsertItem(hTreeView,
                                                            &TV_InsertStruct);
                
 
            }
 
 
 
            return 0;
 
        case WM_NOTIFY:
            nmh=(LPNMHDR) lParam; 
            //TV_Item.mask=TVIF_TEXT;
            TV_Item.pszText=str;
            TV_Item.cchTextMax=100;
            if(nmh->code==TVN_SELCHANGED)
            {
                 if(TreeView_GetItem(hTreeView,&TV_Item))  
                     MessageBox(hWnd,"Success","",MB_OK);
                 else MessageBox(hWnd,"Error","",MB_OK);
                // InvalidateRect(hWnd,0,TRUE);
                 
            }
 
 
            break;
 
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
 
        default:
            return DefWindowProc(hWnd, uMsg, wParam, lParam);
    }
 
    return 0;
}
Нужна помощь по вопросам:
1) Как получить имя выбранного элемента (см WM_NOTIFY - Что-то не так с макросом TreeView_GetItem)
2) Как подгрузить картинку к элементам дерева (см WM_CREATE - создаю ImageList, в TV_Item указываю ID картинки, но не фурычит)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2012, 00:07
Ответы с готовыми решениями:

Работа с TreeView
Добрый день, господа форумчане. Решил поизучать TreeView и сразу столкнулся с траблом: есть 2 процедуры - одна должна из БД загружать...

Работа с Treeview
Добрый день. Подскажите пожалуйста как определить где корневой узел, а где дочерний в дереве. Т.е. что мне нужно: ...

работа с TreeView
доброго времени суток. подскажите как добавить дочерний элемент выбранного элемента? и так же его удаление

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
14.05.2012, 00:45
Цитата Сообщение от thisispanda Посмотреть сообщение
Как получить имя выбранного элемента
Вот так:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        case WM_NOTIFY:
            nmh = (LPNMHDR) lParam;
            /*HTREEITEM*/ hItem = TreeView_GetSelection(hTreeView);
            TV_Item.mask=TVIF_TEXT | TVIF_HANDLE;
            TV_Item.hItem = hItem;
            TV_Item.pszText = str;
            TV_Item.cchTextMax = 100;
            if(nmh->code==TVN_SELCHANGED)
            {
                 if(TreeView_GetItem(nmh->hwndFrom, &TV_Item))
                 {
                     char s[100] = {0};
                     sprintf(s, "item = %s ", TV_Item.pszText);
                     MessageBox(hWnd, s, "Success", MB_OK);
                 }
                 else
                 {
                     MessageBox(hWnd, "oops", "Error",MB_OK);
                 }
// ...
Цитата Сообщение от thisispanda Посмотреть сообщение
Как подгрузить картинку к элементам дерева
Кто будет ассоциировать ImageList с деревом? После создания узлов -
C
1
TreeView_SetImageList(hTreeView, himl, idxBooks);
0
0 / 0 / 0
Регистрация: 02.05.2012
Сообщений: 5
15.05.2012, 16:19  [ТС]
C++
1
Большое спасибо
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
21.08.2013, 20:35
UI, TreeView_SetImageList компилятор говорит что не знает этой функции,идентификатор не найден почему?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
21.08.2013, 23:07
Цитата Сообщение от oleg rus Посмотреть сообщение
почему?
У компилятора спрашивай. Этот макрос описан в файле commctrl.h, если файл подключен (а он должен быть подключен, чтобы откомпилировались остальные фрагменты работы с TreeView) - то всё должно быть найдено. Можно также отослать сообщение TVM_SETIMAGELIST вместо использования этого макроса...
0
6 / 6 / 0
Регистрация: 13.05.2012
Сообщений: 593
22.08.2013, 14:57
UI, Теперь всё работает,какой то глюк компилятора был. А не подскажеш как создать Up-Down контрол.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,895
Записей в блоге: 11
22.08.2013, 15:59
MSDN: How to Create Up-Down Controls
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.08.2013, 15:59
Помогаю со студенческими работами здесь

работа с Treeview
Доброй ночи! есть вот такой код procedure GoToFirstTreeview(MyTreeView:TTreeView); begin MyTreeView.selected := ...

Работа с TreeView
Добрый день! Имеется дерево, которое заполняется из коллекций родительский узел -дочерний узел родительский узел -дочерний...

Работа с TreeView
Доброго времени суток! Делаю справку для программу, используя TreeView и текстовик. Собственно вопрос по работе с компонентом TreeView,...

Работа с TREEVIEW
Кто нибудь может дать код, как узнать &quot;путь&quot; до пункта, то есть имена всех родительских пунктов через слеш. Например: Корень 1 ...

Работа с TreeView
Привет всем! Помогите пожалуйста. Необходимо чтобы элементы с TreeView(левая сторона) отображались в ListView(правая сторона). Чем-то...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru