На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Adding Items to a List View Control



An application can add items to a list view control by using the LVM_INSERTITEM message. The attributes of a list view item that are specified by an LV_ITEM structure include a state, a label, an icon, and item data. Associated with each item may be one or more subitems, which are strings that appear to the right of an item in report view.

The example in this section adds a list view item for each line in a text file. Semicolons are assumed to separate the item label and the subitem strings that follow it. The example saves each item's label and subitem strings in a structure, which is defined in the application's header file, as follows.

#define C_COLUMNS 6

typedef struct myitem_tag {
LPSTR aCols[C_COLUMNS];
} MYITEM;


The application fills in an LV_ITEM structure and adds a list view item by using the LVM_INSERTITEM message. Because the application saves the item label in its own application-defined MYITEM structure, it specifies the LPSTR_TEXTCALLBACK value for the pszText member of the LV_ITEM structure. Specifying this value causes the control to send an LVN_GETDISPINFO notification message to its owner window whenever it needs to display the item. The address of the application-defined structure is saved as item data.

// InitListViewItems - adds items and subitems to a list view.
// Returns TRUE if successful or FALSE otherwise.
// hwndLV - handle of the list view control
// pfData - text file containing list view items with columns
// separated by semicolons
BOOL WINAPI InitListViewItems(HWND hwndLV, FILE *pfData)
{
extern char g_achTemp[256]; // temporary buffer
PSTR pszStart;
PSTR pszEnd;
int iItem;
int iSubItem;
LV_ITEM lvi;


// Initialize LV_ITEM members that are common to all items.
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvi.state = 0;
lvi.stateMask = 0;
lvi.pszText = LPSTR_TEXTCALLBACK; // app. maintains text
lvi.iImage = 0; // image list index

// Read each line in the specified file.
for (iItem = 0;
fgets(g_achTemp, sizeof(g_achTemp), pfData);
iItem++) {

// Allocate an application-defined structure to store the

// item label and the text of each subitem.
MYITEM *pItem = LocalAlloc(LPTR, sizeof(MYITEM));

// Copy the first string (the label).
pszEnd = strchr(g_achTemp, ';');
*pszEnd = '\0';
pItem->aCols[0] = DupString(g_achTemp);

// Copy subsequent strings (subitems).
for (iSubItem = 1;
iSubItem < C_COLUMNS && pszEnd != NULL;
iSubItem++) {
pszStart = pszEnd + 1;

if ((pszEnd = strchr(pszStart, ';')) != NULL)
*pszEnd = '\0';
pItem->aCols[iSubItem] = DupString(pszStart);
}

// Initialize item-specific LV_ITEM members.
lvi.iItem = iItem;
lvi.iSubItem = 0;
lvi.lParam = (LPARAM) pItem; // item data

// Add the item.
ListView_InsertItem(hwndLV, &lvi);

// There is no need to set the text of the subitems. They

// default to LPSTR_TEXTCALLBACK.
}
return TRUE;
}

// DupString - allocates a copy of a string.
// lpsz - address of the null-terminated string to copy

LPSTR DupString(LPSTR lpsz)
{
int cb = lstrlen(lpsz) + 1;
LPSTR lpszNew = LocalAlloc(LMEM_FIXED, cb);
if (lpszNew != NULL)
CopyMemory(lpszNew, lpsz, cb);
return lpszNew;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Дополнение Пунктов на Управление Вида Списка



Приложение может добавить пункты к управлению вида списка используя сообщение LVM_INSERTITEM. Атрибуты списка рассматривают пункт, который определен структурой LV_ITEM включать состояние, этикетка, иконка, и данные пункта. Связанное каждым пунктом может быть один или более подэлементов, которые - строки, которые появляются вправо от пункта с сообщения точки зрения.

Пример в этой секции добавляет пункт вида списка для каждой строки в текстовом файле. Точки с запятой приняты, чтобы разделять этикетку пункта и строки подэлемента за которыми следуют это. Пример сохраняет каждую этикетку пункта и строк подэлемента в структуре, которая определена в прикладном файле заголовка, следующим образом.

#define C_COLUMNS 6

typedef struct myitem_tag { LPSTR aCols[C_COLUMNS];
} MYITEM;


Приложение заполняет структуру LV_ITEM и добавляет пункт вида списка используя сообщение LVM_INSERTITEM. Поскольку приложение сохраняет пункту этикетку в своей собственной определенной прикладной структуре MYITEM, оно определяет величину LPSTR_TEXTCALLBACK для элемента pszText структуры LV_ITEM. Определение этой величины заставляет управление, чтобы посылать сообщение уведомления LVN_GETDISPINFO в свое окно владельца всякий раз, когда ему нужно отображать пункт. Адрес определенной прикладной структуры сохранен как данные пункта.

// InitListViewItems - ДОБАВЛЯЕТ пункты и подэлементы в вид списка.
// ИСТИНА Возврата если успешный или ЛОЖНЫЙ в противном случае.
// hwndLV - РУЧКА управления / вида списка/ pfData - текстовый файл, содержащий пункты вида списка со столбцами // разделенными точками с запятой BOOL WINAPI InitListViewItems(HWND hwndLV, ФАЙЛ *pfData)
{
extern символ g_achTemp[256]; // временный буфер PSTR pszStart;
PSTR pszEnd;
int iItem;
int iSubItem;
lvi LV_ITEM;


// Инициализируйте участников LV_ITEM, которые общие во всех пунктах.
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvi.state = 0;
lvi.stateMask = 0;
lvi.pszText = LPSTR_TEXTCALLBACK; // app. поддерживает текст lvi.iImage = 0; // индекс списка образа

// Прочитанная каждая строка в определенном файле.
для (iItem = 0;
fgets(g_achTemp, sizeof(g_achTemp), pfData);
iItem++) {

// Распределите определенную прикладную структуру, чтобы загружать the

// этикетка пункта и текст каждого подэлемента.
MYITEM *pItem = LocalAlloc(LPTR, sizeof(MYITEM));

// Копия первая строка ( этикетка).
pszEnd = strchr(g_achTemp, ';');
*pszEnd = '\0;
pItem->aCols[0] = DupString(g_achTemp);

// Последующие строки Копии (подэлементов).
для (iSubItem = 1;
iSubItem < C_COLUMNS && pszEnd != НЕДЕЙСТВИТЕЛЬНЫЙ;
iSubItem++) { pszStart = pszEnd + 1;

если ((pszEnd = strchr(pszStart, ';')) != НЕДЕЙСТВИТЕЛЬНЫЙ) *pszEnd = '\0;
pItem->aCols[iSubItem] = DupString(pszStart);
}

// Инициализируйте пункт-специфических участников LV_ITEM.
lvi.iItem = iItem;
lvi.iSubItem = 0;
lvi.lParam = (LPARAM) pItem; // данные пункта

// Добавьте пункт.
ListView_InsertItem(hwndLV, &lvi);

// Нет необходимости устанавливать текст подэлементов. Они

// умолчание на LPSTR_TEXTCALLBACK.
}
возвращайтесь ВЕРНО;
}

// DupString - РАСПРЕДЕЛЯЕТ копию строки.
// lpsz - адрес недействительный расторгнутой строки, чтобы копироваться

LPSTR DupString(LPSTR lpsz)
{
int cb = lstrlen(lpsz) + 1;
LPSTR lpszNew = LocalAlloc(LMEM_FIXED, cb);
если (lpszNew != НЕДЕЙСТВИТЕЛЬНЫЙ) CopyMemory(lpszNew, lpsz, cb);
возвращайте lpszNew;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz