Орган просмотра ListView
На последнем этапе необходимо вставить в список элементы, а также дополнительные элементы (для многоколоночного отчета). Для этого служит макрокоманда ListView_InsertItem,
посылающая органу управления сообщение LVM_INSERTITEM (см. описание этого сообщения для более подробной информации). Для вставки каждого элемента списка необходимо указать номер элемента, номер дополнительного элемента, адрес соответствующей текстовой строки, номер пиктограммы в списке пиктограмм и номер пиктограммы в списке пиктограмм состояния. При этом можно указать, какие из перечисленных параметров следует использовать, а какие – игнорировать при данном вызове макрокоманды. Так, для подэлементов действительным параметром является только адрес текстовой строки.
Приложение, создавшее орган просмотра ListView, должно обрабатывать извещения от ListView, поступающие с сообщением WM_NOTIFY. Для управления органом просмотра ListViewиспользуются сообщения LVM_*. Отметим, что имеется возможность динамического изменения количества элементов списка, а также динамического изменения любого элемента списка. Для добавления нового элемента в список используется сообщение LVM_INSERTITEM, а удаления элемента из списка – сообщение LVM_DELETEITEM. Если при вставке элемента списка вместо конкретного адреса строки была указана константа LPSTR_TEXTCALLBACK, родительское окно будет получать извещение LVN_GETDISPINFO. В ответ на это извещение необходимо заполнить соответствующие поля структуры типа
LV_DISPINFO, указатель на которую передается через параметр lParam сообщения WM_NOTIFY. Это позволяет динамически изменять основную пиктограмму, пиктограмму состояния, а также текстовую строку элемента и дополнительных элементов. В ответ на извещение LVN_COLUMNCLICK, которое поступает, если пользователь щелкает мышью по заголовку столбца, следует послать сообщение LVM_SORTITEMS, указав через его параметр lParam адрес функции сортировки двух элементов списка. Приложение должно содержать функцию сортировки, так как Windows не известен алгоритм сортировки для элементов конкретного списка. Если орган просмотра ListView был создан со стилем LVS_EDITLABELS, пользователь имеет возможность редактировать элементы списка. Приложение должно отслеживать извещения LVN_BEGINLABELEDIT и LVN_ENDLABELEDIT для обновления внутренних структур данных приложения синхронно с изменением элементов списка пользователем. Для определения очередного выбранного пользователем элемента списка используется сообщение LVM_GETNEXTITEM. Обычно это сообщение используется обработчиком извещения NM_DBLCLK. В заключение также отметим, что при помощи функции SetWindowLong можно изменить стиль окна ListView, что может, в частности, привести к изменению режима просмотра. Текущий стиль возвращается функцией GetWindowLong.
предыдущаяследующая