TreeView control >:(

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 9 окт 2005.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Наткнулся на совершенно непонятную штуку.



    После того как выполняю



    TreeView_DeleteAllItems(hTree);



    В него (дерево) перестают добавляться итемы. Если же удалять итемы не полностью а частично, скажем оставляя рут, то все работает. Что именно я упустил?
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _DEN_

    Кокажи код добавления.
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Код (Text):
    1. HWND hTree = GetDlgItem(m_hDlg, IDC_TREE_TYPES);
    2.  
    3. TVINSERTSTRUCT tvis;
    4. ZeroMemory(&tvis, sizeof(TVINSERTSTRUCT));
    5. tvis.hParent      = TVI_ROOT;
    6. tvis.hInsertAfter = TVI_LAST;
    7. tvis.item.mask    = TVIF_TEXT;
    8. tvis.item.pszText = "Types";
    9.  
    10. TreeView_InsertItem(hTree, &tvis);


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

    TreeView_DeleteAllItems(hTree); то элемент не добавляется.
     
  4. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    судя по всему ты рут тоже удаляешь, поэтому детям не за что зацепиться.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    irrona



    Ну да. Только тогда какой смысл макроса TreeView_DeleteAllItems если после него ничего вставить нельзя?
     
  6. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    irrona

    Насколько я понял, после TreeView_DeleteAllItems и рут не добавляется.



    _DEN_

    Так?
     
  7. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    Попробуй так:


    Код (Text):
    1.  
    2. tvis.hParent      = NULL
    3. tvis.hInsertAfter = TVI_ROOT
    4.  
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rmn







    Так.



    irrona







    Пробовал. По-всякому пробовал. Не добавляет.
     
  9. irrona

    irrona Member

    Публикаций:
    0
    Регистрация:
    26 май 2004
    Сообщения:
    178
    Адрес:
    Тирасполь
    Я тебе один вещь скажу, только ты не обижайся.

    Когда я пользовал TreeView, то item-ы удалял так:

    1) подсчитывал кол-во item-ов с помощью SendMessage(hTreeView,TVM_GETCOUNT,0,0).

    2) в цикле удалял item-ы SendMessage(hTreeView,TVM_DELETEITEM,0,item)

    3) подготавливал структуру TV_INSERTSTRUCT, в которой указывал

    TVINSERTSTRUCT tvis;

    tvis.hParent = NULL;

    tvis.hInsertAfter,TVI_ROOT;

    4) вставлял parent-а по-новой

    parent=SendMessage(hTreeView,TVM_INSERTITEM,0,&tvis)

    5) после этого, имея parent цеплял к нему child-ов

    tvis.hParent = parent;

    tvis.hInsertAfter,TVI_LAST;

    child=SendMessage(hTreeView,TVM_INSERTITEM,0,&tvis)



    прошу прощения за возможные ошибки - код транслировал с masm-а.