Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с деревом (поиск хендла записи для добавления к ней дочерней)  (Прочитано 21583 раз)
0 Пользователей и 1 Гость смотрят эту тему.
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« : 16-04-2008 20:44 » 

Перебороздил весь msdn с функциями работы с деревом( TreeView_ )- не могу разобраться в следующем вопросе:
Допустим у меня есть путь "HKEY_USERS\.DEFAULT\Test_Key" - мне надо добраться до ключа .DEFAULT, и уже зная его hItem- в опции вставляемой структуры
Код:
TItemStruct.hParent=hItem;
где поле имени
Код:
TItemStruct.item.pszText=имени ключа
который мы будем добавлять. Вопрос, как это сделать, зная только имена "записей дерева"(получить hItem записи HKEY_USERS, получить hItem подзаписи записи HKEY_USERS- .DEFAULT) ?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 17-04-2008 03:13 » 

я нифига не понял Улыбаюсь Ты хочешь прочитать значение параметра ?
Записан

FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 17-04-2008 07:25 » 

хочу добавить в хкей_локал_машин\хардвар добавить подключ qwe( в дереве)
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 17-04-2008 08:31 » 

Я так понимаю, проходом по дереву TreeView_GetNextSibling + TreeView_GetChild? Проще можно?
Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 17-04-2008 11:57 » 

Я так понимаю, проходом по дереву TreeView_GetNextSibling + TreeView_GetChild? Проще можно?

А с чего начать? И та и та функции принимают 2м параметром hItem- Хендл записи относительно которой применять функции
« Последнее редактирование: 17-04-2008 12:17 от FallenSoul » Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 17-04-2008 12:10 » 

TreeView_GetRoot? =)
Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 17-04-2008 12:28 » 

ага Улыбаюсь

Код:
hTempItem=TreeView_GetRoot(m_MyHandles.hTreeView);

for(int k=1;k<j;k++) //
  hTempItem=TreeView_GetNextSibling(m_MyHandles.hTreeView,hTempItem);

TempItemStruct.hParent=hTempItem;
TempItemStruct.hInsertAfter=TVI_SORT;
TempItemStruct.item.mask=TVIF_TEXT;
TempItemStruct.item.hItem=NULL;
TempItemStruct.item.cchTextMax=255;
TempItemStruct.item.pszText=NewKeyName;

TreeView_InsertItem(m_MyHandles.hTreeView,&TempItemStruct);

« Последнее редактирование: 17-04-2008 12:32 от FallenSoul » Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 17-04-2008 12:36 » 

ага Улыбаюсь

Код:
hTempItem=TreeView_GetRoot(m_MyHandles.hTreeView);

for(int k=1;k<j;k++) //
  hTempItem=TreeView_GetNextSibling(m_MyHandles.hTreeView,hTempItem);

TempItemStruct.hParent=hTempItem;
TempItemStruct.hInsertAfter=TVI_SORT;
TempItemStruct.item.mask=TVIF_TEXT;
TempItemStruct.item.hItem=NULL;
TempItemStruct.item.cchTextMax=255;
TempItemStruct.item.pszText=NewKeyName;

TreeView_InsertItem(m_MyHandles.hTreeView,&TempItemStruct);



Только это не то немного. Незнаю как сюда прилепить имя подключа, например: HKEY_CLASSES_ROOT\S-12323-234-43-534,- как выцепить hItem именно записи "S-12323-234-43-534" ?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 17-04-2008 12:41 » 

Ну так GetChild для HKEY_CLASSES_ROOT, насколько я понимаю. Его-то хэндл у тебя теперь есть. Если у него много чайлдов, то опять пошёл GetSibling по ним, пока ненайдёшь нужное. И так далее, Sibling, нашёл нужную ветку - Child, и так по кругу, пока не дойдёшь до нужного узла
« Последнее редактирование: 17-04-2008 12:43 от Вад » Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 17-04-2008 12:43 » 

Цитата
TreeView_GetChild
Send Feedback

This macro retrieves the first child item of the specified tree-view item. You can use this macro, or you can explicitly send the TVM_GETNEXTITEM message with the TVGN_CHILD flag.
HTREEITEM TreeView_GetChild(
  hwnd,
  hitem
);
Parameters
hwnd
Handle to the tree view control.
hitem
Handle to a tree view item.
Return Values

The handle to the item indicates success. NULL indicates failure.

Хендл то я получу- но крутить цикл то мне как по подключам чтоб остановиться на том где имя ?

Разобрался как крутить-не разобрался как вытащить имя из хендла записи на которой я на данный момент нахожусь, чтоб сравнить с той, в которую мне надо добавить
« Последнее редактирование: 17-04-2008 12:46 от FallenSoul » Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 17-04-2008 14:55 » 

Очень нужен ответ на этот вопрос- просьба знающих откликнуться
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 17-04-2008 15:30 » 

FallenSoul, знаешь, я все твои темки просматриваю и нифига не понимаю. Или тебе не хватает простых начальных знаний, или ты так формулируешь вопросы, что они понятны только тебе.
От одной только фразы "как вытащить имя из хендла" мне уже становится нехорошо.

Начни с того, что сделай просто дерево 3х3 соответственно 3 уровня 1 2 3 и подуровни 11 12 13 21 22 23 ... Простыми циклами.

1
    11
          111
          112
          113
    12
          121
          122
          123
    13
          131
          132
          133
2
...
3
...

А то с твоими HKEY_USERS\.DEFAULT\Test_Key сам чёрт ногу сломит.

Потом сделай для этого дерева рекурсивную ф-ю обхода каждого эл-та с распечаткой в дебаггере, каждый подуровень (вход в рекурсию) получает вначале \t.

Когда ты это осилишь сделай рекурсивную ф-ю поиска элемента.

Работы на полчаса. Зато у тебя будет ясное представление о работе с деревом и куча вопросов отпадёт сама собой.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 17-04-2008 15:38 » 

FallenSoul, знаешь, я все твои темки просматриваю и нифига не понимаю. Или тебе не хватает простых начальных знаний, или ты так формулируешь вопросы, что они понятны только тебе.
От одной только фразы "как вытащить имя из хендла" мне уже становится нехорошо.

Начни с того, что сделай просто дерево 3х3 соответственно 3 уровня 1 2 3 и подуровни 11 12 13 21 22 23 ... Простыми циклами.

1
    11
          111
          112
          113
    12
          121
          122
          123
    13
          131
          132
          133
2
...
3
...

А то с твоими HKEY_USERS\.DEFAULT\Test_Key сам чёрт ногу сломит.

Потом сделай для этого дерева рекурсивную ф-ю обхода каждого эл-та с распечаткой в дебаггере, каждый подуровень (вход в рекурсию) получает вначале \t.

Когда ты это осилишь сделай рекурсивную ф-ю поиска элемента.

Работы на полчаса. Зато у тебя будет ясное представление о работе с деревом и куча вопросов отпадёт сама собой.


Я извиняюсь всячески за мб не правильно сформулированные вопросы, или глупые вопросы, но:

Дерево я уже построил- рекурсивно заполнил. Как делать обход по элементам я тоже знаю.
Конкретный вопрос: Зная хендл записи, как достать её имя?
Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 17-04-2008 15:50 » 

FallenSoul, TreeView_GetItem Улыбаюсь И читать MSDN про структуру TVITEM в части поля mask.
Записан
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 17-04-2008 17:34 » 

Вад, Джон, всё получилось- спасибо.

Вад, Видать прошёл мимо этой функции когда искал Улыбаюсь

Джон, Знаний не хватает- полностью книгу читать по АПИ не получается, скорее использую её как справочник- так же как мсдн,- по непонятным вопросам вся надежда только на форум Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 18-04-2008 08:17 » 

FallenSoul, Боже упаси тебя читать книгу по АПИ/МСДН как роман. Только как справочник по данному конкретному вопросу. Те начал с деревом работь - значит читаем про дерево, что у него бывает:

http://msdn2.microsoft.com/en-us/library/bb762741(VS.85).aspx

Тем более, если ты уже заполнял дерево, то чтобы присвоить текст использовал макрос TreeView_SetItem или сообщение TVM_SETITEM. Значит должен быть и обратный ему для TVM_GETITEM - TreeView_GetItem. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 18-04-2008 13:11 » 


Тем более, если ты уже заполнял дерево, то чтобы присвоить текст использовал макрос TreeView_SetItem или сообщение TVM_SETITEM. Значит должен быть и обратный ему для TVM_GETITEM - TreeView_GetItem. Ага

Мммм... Я когда заполнял дерево, полю вставляемой структуры присваивал имя Улыбаюсь
Код:
TItemStruct.item.pszText=ChildKeyName;
hItemChild = TreeView_InsertItem(hTreeView, &TItemStruct);
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 18-04-2008 13:57 » 

Ок, расширим спектр задач - сделать ф-ю переименования всех айтемов дерева (например добавить к каждому слово). Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
FallenSoul
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 18-04-2008 14:45 » 

Ок, расширим спектр задач - сделать ф-ю переименования всех айтемов дерева (например добавить к каждому слово). Ага

Здесь уже без SetItem и GetItem врятли обойтись Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 18-04-2008 15:40 » new

Знаешь, Эйнштейн как-то мне сказал Ага : "Знание - это опыт, всё остальное - всего-навсего информация."

Так что набирайся опыта. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines