Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Tree View, проблемы с получением номера Item 
V
    Опции темы
Edik
Дата 29.9.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

Репутация: нет
Всего: 1



вот следующий кусок программы. как мне получить номер индекса выделенного элемента? не относительно родительской ветки а вобще от root, самой первой ветки. я что то не могу с индексацией итемов разобраться в этом Tree View.
Код

case WM_NOTIFY :
{
    LPNMHDR pnmh = (LPNMHDR) lParam ;
    if (pnmh->code == TVN_SELCHANGED)
    {
    hTreeView=GetDlgItem(hwnd, IDC_TREE1);
    if (pnmh->hwndFrom!=hTreeView) break;
    iPosItem=SendMessage(hTreeView, TVM_GETNEXTITEM, TVGN_CARET, -1);
    itoa(iPosItem,cPosItem,10);
    SetDlgItemText(hwnd, IDC_MYTEXT, cPosItem);
    }
}
break;

PM MAIL   Вверх
Earnest
Дата 30.9.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



А нет такого понятия у TreeView как сквозной индекс. Само понятие индекса в дереве как-то не определено.
Если тебе надо получить от элемента дерева доступ к каким-то своим данным - делаешь элементарно: при добавлении элементов записываешь в UserData индекс или адрес, по желанию.


--------------------
...
PM   Вверх
Edik
Дата 30.9.2006, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

Репутация: нет
Всего: 1



а каким TVM_ потом получить доступ к ветке?
PM MAIL   Вверх
Edik
Дата 30.9.2006, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

Репутация: нет
Всего: 1



Эрнест, а как оцениш следующий код? я саму тему содрал с "кодепроект". но выдает в виде текста строку из TreeView. Зачем только там TreeView_EnsureVisible? что это такое?
Код

case WM_NOTIFY :
    {
    LPNMHDR pnmh = (LPNMHDR) lParam ;
    if (pnmh->code == TVN_SELCHANGED)
    {
        hTreeView=GetDlgItem(hwnd, IDC_TREE1);
        if (pnmh->hwndFrom!=hTreeView) break;
Selected=(HTREEITEM)SendDlgItemMessage(hwnd,IDC_TREE1,TVM_GETNEXTITEM,TVGN_CARET,(LPARAM)Selected);
//TreeView_EnsureVisible(hwnd,Selected);
SendDlgItemMessage(hwnd,IDC_TREE1,TVM_SELECTITEM,TVGN_CARET,(LPARAM)Selected);
char Text[255]="";
memset(&tvi,0,sizeof(tvi));
tvi.mask=TVIF_TEXT;
tvi.pszText=Text;
tvi.cchTextMax=256;
tvi.hItem=Selected;
SendDlgItemMessage(hwnd,IDC_TREE1,TVM_GETITEM,TVGN_CARET,(LPARAM)&tvi);
strcpy(cPosItem,tvi.pszText);
SetDlgItemText(hwnd,IDC_STATICTEXT, cPosItem);
}
}
break;

PM MAIL   Вверх
Earnest
Дата 2.10.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 33
Всего: 183



Цитата(Edik @  30.9.2006,  15:33 Найти цитируемый пост)
а каким TVM_ потом получить доступ к ветке? 

К какой ветке?
Если с заданными данными, то искать ручками, рекурсивно, готовой функции нет.

Код приведенный не поняла к чему. Ну опрашивает итем, и что?
Если ты насчет качества кода спрашиваешь, то, по-моему, безобразный. Я предпочитаю писать маленькие служебные функции типа GetSomething или FindSomething и т.д., и чтобы потом основной код читался на раз, без всех этих SendMessage и заполнений структур. А писать столько кода под case - вообще убила бы.

EnsureVisible вроде должен гарантировать, что заданный итем будет виден, т.е. раскрыть все что надо и прокрутить. 


--------------------
...
PM   Вверх
Edik
Дата 11.10.2006, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 207
Регистрация: 13.9.2006

Репутация: нет
Всего: 1



ну ты крутой!!! сразу видно- голова!!! smile  smile  smile  smile  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.