Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Пробующий
 Аватар для galileopro
185 / 98 / 10
Регистрация: 28.04.2009
Сообщений: 1,101

Виртуальный ListView

27.02.2010, 17:40. Показов 3007. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть табличка данных на 2000 строк (приблизитльно). Я их отображаю в ListView. Ну как-то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HWND ListView1 = CreateWindow(WC_LISTVIEW, "LISTVIEW",WS_VISIBLE|WS_CHILD|WS_BORDER|LVS_REPORT|LVS_EDITLABELS|
                            WS_VSCROLL|WS_BORDER|WS_HSCROLL,10, 5, 500, 300,hWnd, (HMENU)ID_LISTVIEW, 0, 0);
...
/*Столбцы таблицы*/
    memset(&lvc, 0, sizeof(lvc));
    lvc.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
    lvc.fmt = LVCFMT_LEFT;
    PutColumn(lvc, 100, "HWND", 0);
    PutColumn(lvc, 150, "Name1", 1);
    PutColumn(lvc, 250, "Name2",2);
    /*Строки таблицы*/
    memset(&lvi, 0, sizeof(lvi));
    lvi.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_PARAM;
И дальше много раз ывзывается
ListView_SetItemText(ListView1,kol,0,mhwnd);
    ListView_SetItemText(ListView1,kol,1,Name1);
    ListView_SetItemText(ListView1,kol,2,Name2);
И исходные данные 5 раз в скунду обновляются. Я делаю тогда
C++
1
2
ListView_DeleteAllItems(ListView1);
    дальш заново заполняю 2000 строк
Все это жутко моргает. В тырнетах есть много статей на эту тему, но пока не вс ясно. Пока понял, чно нужно установить стиль LVS_OWNERDATA, задать количество элементов в виртуальном списке одной из следующих функций.
void CListCtrl::SetItemCount( int iCount )
void CListCtrl::SetItemCountEx( int iCount, DWORD dwFlags = LVSICF_NOINVALIDATEALL );iCount новое количество элементов
dwDlags Комбинация флагов, определяющая реакцию списка на изменение количества элементов.
LVSICF_NOINVALIDATEALL Список не будет перерисован, пока добавленные элементы не окажутся с поле видимости. За заполнение элементов перед отрисовкой отвечает приложение. Для этого список посылает уведомление LVN_GETDISPINFO. В обработчике уведомления LVN_GETDISPINFO необходимо проверить, какая информация требуется, и заполнить соответствующие поля.
Но пока не пойму как это все увязать и сделать обработку QScrollView:
The contentsMoving() signal is emitted just before the contents are moved to a new position.
В обработчике этого сигнала, надо реализовать замену данных в QListView
LVSICF_NOSCROLL Позиция скроллинга не изменится.

Неужли никто не знает как виртуальный ListView заюзать? Я сколько ковыряю, не могу туда текст добавить нормально. Вот что-то такое делаю
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
switch(Message)
    {
        case WM_NOTIFY:
            {
                NMHDR hdr = *(NMHDR*)lParam;
                if(hdr.code == LVN_GETDISPINFO)
                {
                    LV_DISPINFO * lpLvdi = (LV_DISPINFO *)&hdr;
                    char szBuf[20];
                    for(int i=0;i<20;++i)
                    szBuf[i] = 'g';
                    if(lpLvdi->item.mask & LVIF_TEXT)
                    {
                    switch(lpLvdi->item.iSubItem)
                        {
                    case 0:
                    lpLvdi->item.pszText = "Stolbec1";
                        break;
                    case 1:
                    lpLvdi->item.pszText = "Stolbec2";
                        break;
                    case 2:
                    itoa(5, szBuf, 10);
                    lpLvdi->item.pszText = szBuf;
                        break;
                    default:
                        break;
                    }break;
                    }
                }
Но оно на сообщние реагирует, но не заполнят((
Создавал я его так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ListView1 = CreateWindow(WC_LISTVIEW, "LISTVIEW",WS_VISIBLE|WS_CHILD|WS_BORDER|LVS_REPORT|LVS_EDITLABELS|
                            WS_VSCROLL|WS_BORDER|WS_HSCROLL|LVS_OWNERDATA,10, 5, 500, 300,hWnd, (HMENU)ID_LISTVIEW, 0, 0);
    long rStyle = SendMessage(ListView1, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
    rStyle = rStyle | LVS_EX_FULLROWSELECT;
    SendMessage(ListView1, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, rStyle);
    /*Столбцы таблицы*/
    memset(&lvc, 0, sizeof(lvc));
    lvc.mask = LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
    lvc.fmt = LVCFMT_LEFT;
    PutColumn(lvc, 100, "HWND", 0);
    PutColumn(lvc, 150, "Class Name", 1);
    PutColumn(lvc, 250, "Window Text",2);
    /*Строки таблицы*/
    memset(&lvi, 0, sizeof(lvi));
    lvi.mask = LVIF_IMAGE|LVIF_TEXT|LVIF_PARAM;
Здесь lvi объявлена была выше и имеет тип
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct MyITEM 
{ 
  UINT   mask; // маска использования полей структуры LV_ITEM
  int    iItem;       // номер элемента
  int    iSubItem;    // номер дополнительного элемента
  UINT   state;       // текущее состояние элемента
  UINT   stateMask;   // маска состояния элемента
  LPTSTR pszText;     // адрес текстового буфера
  int    cchTextMax;  // размер текстового буфера
  int    iImage;      // номер пиктограммы элемента
  LPARAM lParam;// 32-битовое значение, связанное с элементом
};
MyITEM lvi;
Помогите плз. Мне до понедельника надо это сдать(
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2010, 17:40
Ответы с готовыми решениями:

Виртуальный режим в ListView
Добрый день! Задача состоит в том, чтобы считать файл и вывести его содержимое в hex на экран. Вывожу в listview. На данный момент не...

Виртуальный режим в ListView
Добрый день! Задача состоит в том, чтобы считать данные файла любого размера и вывести их в hex на экран. С файлом работаю через...

Как перетащить элемент из ListView в другой ListView?
У меня есть форма на ней два ListView хочу из одного ListView в другой ListView перетащить объект. Как это сделать? Подскажите плиз.:wall:

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2010, 17:40
Помогаю со студенческими работами здесь

Виртуальный контекст
Господа я так понимаю это должно быть виртуальное окно?Вопрос как сделать виртульное окно и то , что мы туда нарисум перенести на наше...

Виртуальный замок
Доброе утро! Возникла такая проблема. Допустим, я хочу запретить наследоваться от своего класса другим классам и получить ошибку...

Виртуальный код клавмши точка
У меня функция winapi запрашивает виртуальный код клавиши, типа VK_KEYUP, VK_DELETE и тп. А какой код у точки - &quot;.&quot; ?

Как сделать виртуальный диск?
Как можно создать виртуальный диск из файла-образа? Например как в PGPdisk. Если для этого нужен драйвер, то где можно почитать про это?

Виртуальный код кнопки включения электропитания
Вот на системном блоке есть такая большая кнопка, которая включает компьютер, какой у этой кнопки виртуальный код(типа как у клавиши Enter...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru