FallenSoul
|
|
« : 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) ?
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 17-04-2008 03:13 » |
|
я нифига не понял Ты хочешь прочитать значение параметра ?
|
|
|
Записан
|
|
|
|
FallenSoul
|
|
« Ответ #2 : 17-04-2008 07:25 » |
|
хочу добавить в хкей_локал_машин\хардвар добавить подключ qwe( в дереве)
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #3 : 17-04-2008 08:31 » |
|
Я так понимаю, проходом по дереву TreeView_GetNextSibling + TreeView_GetChild? Проще можно?
|
|
|
Записан
|
|
|
|
FallenSoul
|
|
« Ответ #4 : 17-04-2008 11:57 » |
|
Я так понимаю, проходом по дереву TreeView_GetNextSibling + TreeView_GetChild? Проще можно?
А с чего начать? И та и та функции принимают 2м параметром hItem- Хендл записи относительно которой применять функции
|
|
« Последнее редактирование: 17-04-2008 12:17 от FallenSoul »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #5 : 17-04-2008 12:10 » |
|
TreeView_GetRoot? =)
|
|
|
Записан
|
|
|
|
FallenSoul
|
|
« Ответ #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
|
|
« Ответ #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" ?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #8 : 17-04-2008 12:41 » |
|
Ну так GetChild для HKEY_CLASSES_ROOT, насколько я понимаю. Его-то хэндл у тебя теперь есть. Если у него много чайлдов, то опять пошёл GetSibling по ним, пока ненайдёшь нужное. И так далее, Sibling, нашёл нужную ветку - Child, и так по кругу, пока не дойдёшь до нужного узла
|
|
« Последнее редактирование: 17-04-2008 12:43 от Вад »
|
Записан
|
|
|
|
FallenSoul
|
|
« Ответ #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
|
|
« Ответ #10 : 17-04-2008 14:55 » |
|
Очень нужен ответ на этот вопрос- просьба знающих откликнуться
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #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.
Когда ты это осилишь сделай рекурсивную ф-ю поиска элемента.
Работы на полчаса. Зато у тебя будет ясное представление о работе с деревом и куча вопросов отпадёт сама собой.
Я извиняюсь всячески за мб не правильно сформулированные вопросы, или глупые вопросы, но: Дерево я уже построил- рекурсивно заполнил. Как делать обход по элементам я тоже знаю. Конкретный вопрос: Зная хендл записи, как достать её имя?
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #13 : 17-04-2008 15:50 » |
|
FallenSoul, TreeView_GetItem И читать MSDN про структуру TVITEM в части поля mask.
|
|
|
Записан
|
|
|
|
FallenSoul
|
|
« Ответ #14 : 17-04-2008 17:34 » |
|
Вад, Джон, всё получилось- спасибо. Вад, Видать прошёл мимо этой функции когда искал Джон, Знаний не хватает- полностью книгу читать по АПИ не получается, скорее использую её как справочник- так же как мсдн,- по непонятным вопросам вся надежда только на форум
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #16 : 18-04-2008 13:11 » |
|
Тем более, если ты уже заполнял дерево, то чтобы присвоить текст использовал макрос TreeView_SetItem или сообщение TVM_SETITEM. Значит должен быть и обратный ему для TVM_GETITEM - TreeView_GetItem. Мммм... Я когда заполнял дерево, полю вставляемой структуры присваивал имя TItemStruct.item.pszText=ChildKeyName; hItemChild = TreeView_InsertItem(hTreeView, &TItemStruct);
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
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
|
|
« Ответ #18 : 18-04-2008 14:45 » |
|
Ок, расширим спектр задач - сделать ф-ю переименования всех айтемов дерева (например добавить к каждому слово). Здесь уже без SetItem и GetItem врятли обойтись
|
|
|
Записан
|
|
|
|
Джон
просто
Администратор
Offline
Пол:
|
|
« Ответ #19 : 18-04-2008 15:40 » |
|
Знаешь, Эйнштейн как-то мне сказал : "Знание - это опыт, всё остальное - всего-навсего информация." Так что набирайся опыта.
|
|
|
Записан
|
Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома. "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."
|
|
|
|