Форум программистов, компьютерный форум CyberForum.ru

Помогите с TVM_DELETEITEM - C++

Восстановить пароль Регистрация
 
ILva
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 5
30.03.2011, 01:40     Помогите с TVM_DELETEITEM #1
Надо удалить выделенную ветвь из дерева.
Я написал следующий код:
C++
1
2
3
4
5
HTREEITEM hSelItem=(HTREEITEM)SendMessage(TVM_GETNEXTITEM,(WPARAM)(UINT)TVGN_CARET,NULL);
HTREEITEM hRootItem=(HTREEITEM)SendMessage(TVM_GETNEXTITEM,(WPARAM)(UINT)TVGN_ROOT,NULL);
if(hSelItem!= NULL && hSelItem!=hRootItem){
SendMessage(TVM_DELETEITEM,0,(LPARAM)(HTREEITEM)hSelItem);
}
Тут все работает.
Но возникла новая проблема: мое дерево хранится в базе данных и мне надо при удалении ветки удалить из базы данных и всех ее детей. Т.е, грубо говоря, запустить на каждого ребенка RemoveData(hItem). В МСДН по этому поводу написано 'The parent window receives a TVN_DELETEITEM notification message when each item is removed.'
Как мне отловить это сообщение и получить hItem объекта? Подскажите пожалуйста...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
30.03.2011, 02:33     Помогите с TVM_DELETEITEM #2
Все собития Дерева отлавливаються в WM_NOTIFY:
C++
1
2
3
4
5
6
7
8
9
10
11
12
case WM_NOTIFY:
     NMHDR *pnmh = (LPNMHDR) lParam; 
     switch(pnmh->code)
     {
          case TVN_DELETEITEM:
          {  NMTREEVIEW *item = (LPNMTREEVIEW) lParam;
             Beep(1000,10);//:)
              
          }
        break;
    }
break;
ILva
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 5
30.03.2011, 11:36  [ТС]     Помогите с TVM_DELETEITEM #3
Спасибо за ответ.
Я создаю элемент ActiveX на базе элемента дерево. Попробовал вставить этот код в ф-цию OnWndMsg:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
BOOL CAXTreeViewCtrl::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult)
{
 switch(message){
  case WM_NOTIFY:{
   NMHDR *pnmh = (LPNMHDR)lParam; 
   if(pnmh->code){
      case TVN_DELETEITEM:{ 
    NMTREEVIEW *item = (LPNMTREEVIEW) lParam;
    Beep(1000,10);
    break;
       }
    }
    break;
   }
 }
 return COleControl::OnWndMsg(message, wParam, lParam, pResult);
}
но сообщение WM_NOTIFY никогда не приходит. С чем это может быть связано?
ILva
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 5
30.03.2011, 11:46  [ТС]     Помогите с TVM_DELETEITEM #4
Заработало, я стормозил. Надо было в обработчик сообщений родительского окна вставлять. Большое спасибо.
Kovalsky2
0 / 0 / 0
Регистрация: 05.08.2009
Сообщений: 96
30.03.2011, 15:32     Помогите с TVM_DELETEITEM #5
Да,да я Вам по Api-шному написал,я как раз тогда я max-@ про Api рассказывал.
А у Вас,как Вы писали в 'ActiveX и MFC помогите!'.
Вроде в MFC можно просто создать функцию,которая обрабатывает WM_DELETEITEM.
Такого вида:
void CAXTreeViewCtrl::OnDeleteItem(int nIDCtl, LPDELETEITEMSTRUCT lpDeleteItemStruct)
Cоздать её через ClassWizard(VC6) или в VC7 в Properties.
Yandex
Объявления
30.03.2011, 15:32     Помогите с TVM_DELETEITEM
Ответ Создать тему
Опции темы

Текущее время: 08:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru