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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как поймать LVN_DELETEITEM? 
:(
    Опции темы
Alca
Дата 22.10.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Как поймать LVN_DELETEITEM?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 22.10.2009, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Код

void __fastcall TXListView::_procNewWnd(Messages::TMessage &Message) {
    //...

    if (WM_NOTIFY == Message.Msg) {
        //LVN_DELETEITEM
        LPNMLISTVIEW pnmv = reinterpret_cast<LPNMLISTVIEW>(Message.LParam);
        switch (???) {
            //???
        }
        //...
    }
    
    _m_procOldWnd(Message); 
}



--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 22.10.2009, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



Посмотри тут


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 22.10.2009, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Цитата

Посмотри тут

В нужном месте:
Цитата

Ограниченный объем книги не позволяет подробно описать все параметры этих сообщений, поэтому мы приведем только краткий список 
сообщений
  smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 22.10.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



 smile  Но пример то есть!


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 22.10.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Код

// -----------------------------------------------------
// Функция WndProc_OnNotify
// -----------------------------------------------------
LRESULT WndProc_OnNotify(HWND hWnd, int idFrom, NMHDR* pnmhdr)
{
  LV_DISPINFO * lpLvdi = (LV_DISPINFO *)pnmhdr;
  APPLINFO * lpAppinfo = (APPLINFO *)(lpLvdi->item.lParam);
  static char szBuf[20];
  NM_LISTVIEW *lpNm = (NM_LISTVIEW *)pnmhdr;

  if(idFrom != IDC_LISTVIEW)
    return 0L;

  switch(pnmhdr->code)
  {
    case LVN_GETDISPINFO:
    {
      if(lpLvdi->item.mask & LVIF_TEXT)
      {
        switch(lpLvdi->item.iSubItem)
        {
          case 0:
            lpLvdi->item.pszText = lpAppinfo->szAppName;
            break;

          case 1:
            lpLvdi->item.pszText = lpAppinfo->szIconName;
            break;

          case 2:
            itoa(lpAppinfo->iCost, szBuf, 10);
            lpLvdi->item.pszText = szBuf;
            break;

          default:
            break;
        }
        break;
      }
    }

    case LVN_COLUMNCLICK:
    {
      ListView_SortItems(lpNm->hdr.hwndFrom, 
        LVCompareProc, (LPARAM)(lpNm->iSubItem));
      return 0L;
      break;
    }

    case LVN_BEGINLABELEDIT:
    {
      return 0L;
      break;
    }

    case LVN_ENDLABELEDIT:
    {
      if((lpLvdi->item.iItem != -1) &&
         (lpLvdi->item.pszText != NULL))
         lstrcpy(lpAppinfo->szAppName, lpLvdi->item.pszText);
      return 0L;
      break;
    }

    case NM_DBLCLK:
    {
      int index;
      LV_ITEM lvi;
      char szBuf[256];

      strcpy(szBuf, "Selected item:\n");

      // Определяем номер выделенного элемента
      index = ListView_GetNextItem(hwndList,
        -1, LVNI_ALL | LVNI_SELECTED);

      if(index == -1)
        return 0;

      // Подготавливаем структуру типа LV_ITEM
      // для получения текстовой информации об элементах
      memset(&lvi, 0, sizeof(lvi));
      lvi.mask = LVIF_TEXT;

      // Получаем название элемента
      lvi.iItem = index;
      lvi.iSubItem = 0;
      ListView_GetItem(hwndList, &lvi);
      strcat(szBuf, lvi.pszText);

      // Получаем текстовую строку, связанную
      // с первым и вторым дополнительным элементом
      lvi.iItem = index;
      lvi.iSubItem = 1;
      ListView_GetItem(hwndList, &lvi);
      strcat(szBuf, " : ");
      strcat(szBuf, lvi.pszText);

      lvi.iItem = index;
      lvi.iSubItem = 2;
      ListView_GetItem(hwndList, &lvi);
      strcat(szBuf, " : $");
      strcat(szBuf, lvi.pszText);

      // Выводим на экран текстовые строки
      // для выбранного элемента
      MessageBox(hWnd, szBuf, szAppName, MB_OK);
      return 0L;
      break;
    }
  }
  return 0L;
}

где здесь отлов LVN_DELETEITEM?


--------------------
PM WWW ICQ Skype Jabber   Вверх
smoke_man
Дата 22.10.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



то есть как в case`е его отработать?


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Alca
Дата 22.10.2009, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Ага

Добавлено через 26 секунд
Код

if (WM_NOTIFY == Message.Msg) {
        //LVN_DELETEITEM
        LPNMLISTVIEW pnmv = reinterpret_cast<LPNMLISTVIEW>(Message.LParam);
        switch (???) {
            //???
        }
        //...
    }



--------------------
PM WWW ICQ Skype Jabber   Вверх
GremlinProg
Дата 22.10.2009, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(Alca @  22.10.2009,  15:29 Найти цитируемый пост)

        switch (???) {
            //???
        }

Код

        switch ( pnmv->hdr.code ) {
            case LVN_DELETEITEM:{
                // оно самое
                break;
            }
        }



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Alca
Дата 22.10.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Код

LPNMLISTVIEW pnmv = reinterpret_cast<LPNMLISTVIEW>(Message.LParam);
switch ( pnmv->hdr.code ) {
    case LVN_DELETEITEM: 
    {
        ::OutputDebugString(_T("LVN_DELETEITEM"));
        break;
    }
}

Я так пробывал - не работает.


--------------------
PM WWW ICQ Skype Jabber   Вверх
mekhanikus
Дата 23.10.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

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



Код

NMHDR* hdr = reinterpret_cast<NMHDR*>(Message.LParam);
switch (hdr->code )
{
    case LVN_DELETEITEM: 
    {
        ::OutputDebugString(_T("LVN_DELETEITEM"));
        break;
    }
}

У меня так работает.
PM MAIL   Вверх
Alca
Дата 23.10.2009, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Цитата

У меня так работает.

У тебя листвью лежит на форме? У меня на пейджконтроле.


--------------------
PM WWW ICQ Skype Jabber   Вверх
586
Дата 23.10.2009, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Alca @  23.10.2009,  12:30 Найти цитируемый пост)
У меня на пейджконтроле. 

Попробуй субклассить PageControl

Добавлено через 2 минуты и 51 секунду
точнее, вкладку TTabSheet. Сообщения WM_NOTIFY для родителю, а не ListView.
PM   Вверх
586
Дата 23.10.2009, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



А вот LVM_DELETEITEM можно поймать в ListView.

Добавлено через 5 минут и 24 секунды
в MSDN ещё сказано про LVN_DELETEITEM
Цитата
Remarks
Do not add, delete, or rearrange items in the list view while processing this notification.

PM   Вверх
mekhanikus
Дата 23.10.2009, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

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



Цитата(Alca @  23.10.2009,  11:30 Найти цитируемый пост)
У тебя листвью лежит на форме? У меня на пейджконтроле. 

А у меня на TabCtrl, а месседж ловлю в DialogProc.
При этом TabCtrl сделан родителем ListView.
Потому как по другому (родитель - диалог) наблидались косяки с отрисовкой ScrollBar.
И все ОК.
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.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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