Операционная система Windows 95 для программиста

       

Вставка элементов списка


На последнем этапе вы должны вставить в список элементы. Проще всего это сделать с помощью макрокоманды ListView_InsertItem , посылающей органу управления List View сообщение LVM_INSERTITEM :

int ListView_InsertItem( HWND hwnd, // идентификатор окна List View const LV_ITEM FAR * pitem); // адрес структуры LV_ITEM

Перед тем как вставлять элемент, вы должны записать его атрибуты в структуру LV_ITEM , определенную следующим образом:

typedef struct _LV_ITEM { UINT mask; // маска использования полей структуры LV_ITEM int iItem; // номер элемента int iSubItem; // номер дополнительного элемента UINT state; // текущее состояние элемента UINT stateMask; // маска состояния элемента LPTSTR pszText; // адрес текстового буфера int cchTextMax; // размер текстового буфера int iImage; // номер пиктограммы элемента LPARAM lParam;// 32-битовое значение, связанное с элементом } LV_ITEM;

Поле маски mask определяет, какие из полей структуры LV_ITEM будут использованы при добавлении элементов. Возможны следующие значения масок (их можно объединять при помощи логической операции ИЛИ):



Маска Заполненное поле структуры LV_ITEM
LVIF_TEXT pszText
LVIF_IMAGE iImage
LVIF_PARAM lParam
LVIF_STATE state

Ниже мы привели фрагмент исходного текста приложения List Application, в котором к созданному ранее списку добавляется 9 элементов:

memset(&lvi, 0, sizeof(lvi)); lvi.mask = LVIF_IMAGE | LVIF_TEXT | LVIF_PARAM; lvi.pszText = LPSTR_TEXTCALLBACK; for(i=0; i<9; i++) { lvi.iItem = i; lvi.iSubItem = 0; lvi.cchTextMax = 40; lvi.lParam = (LPARAM)&rgApplInfo[i];

lvi.iImage = i; ListView_InsertItem(hwndList, &lvi);

lvi.iItem = i; lvi.iSubItem = 1; ListView_InsertItem(hwndList, &lvi);

lvi.iItem = i; lvi.iSubItem = 2; ListView_InsertItem(hwndList, &lvi); }

Так как в нашем примере пиктограммы состояния элементов не используются, мы не заполняем поля state и stateMask.

В поле iItem мы записываем номер элемента, изменяя его в цикле от 0 до 9.

Аналогичным образом мы поступаем и с полем iImage, записывая в него номер пиктограммы для элемента. Напомним, что в разных режимах работы органа управления List View будут использованы пиктограммы из разных списков (стандартного и уменьшенного размера).

В поле pszText можно было бы записать адрес текстовой строки, соответствующей названию элемента или дополнительному элементу, однако мы занесли туда значение LPSTR_TEXTCALLBACK . В этом случае адрес нужной строки будет предоставляться при обработке соответствующего извещения, о чем речь еще впереди.

На этом мы завершим описание процесса создания и наполнения органа управления List View. Из-за ограниченного объема книги мы не рассмотрели все особенности процесса. За более подробной информацией вы можете обратиться к справочной документации, которая поставляется вместе с SDK.



Содержание раздела